Repository: AY2425S2-CS2103-F08-3/tp
Pull request #217: Add searchSellerProperty command
Author: login: Ryuse
Labels: name: type.Story
description: A user story
name: priority.Medium
description: Nice to have
Created: 2025-03-24T06:56:24Z | Merged: 2025-03-24T13:23:01Z

Fixes #216

Before
![image](https://github.com/user-attachments/assets/ab398003-6ee6-49c5-8062-f5044053d73e)

After `searchSellerProperty 1`
![image](https://github.com/user-attachments/assets/5d2cefbf-bbc5-4201-8a87-9c34c8cb2ff0)


Linked issue #216: Add searchSellerProperty command

Diff:
diff --git a/src/main/java/seedu/address/logic/commands/AssignListingCommand.java b/src/main/java/seedu/address/logic/commands/AssignListingCommand.java
index c73c5cc76d2..0607470b1c3 100644
--- a/src/main/java/seedu/address/logic/commands/AssignListingCommand.java
+++ b/src/main/java/seedu/address/logic/commands/AssignListingCommand.java
@@ -51,7 +51,7 @@ public CommandResult execute(Model model) throws CommandException {
         }
         Person personToAddListing = lastShownPersonList.get(personIndex.getZeroBased());
 
-        List<Listing> lastShownListingList = model.getFilteredListingList();
+        List<Listing> lastShownListingList = model.getSortedFilteredListingList();
         if (listingIndex.getZeroBased() >= lastShownListingList.size()) {
             throw new CommandException(Messages.MESSAGE_INVALID_LISTING_DISPLAYED_INDEX);
         }
diff --git a/src/main/java/seedu/address/logic/commands/SearchOwnerPropertyCommand.java b/src/main/java/seedu/address/logic/commands/SearchOwnerPropertyCommand.java
new file mode 100644
index 00000000000..ef0a2f7c2b9
--- /dev/null
+++ b/src/main/java/seedu/address/logic/commands/SearchOwnerPropertyCommand.java
@@ -0,0 +1,92 @@
+package seedu.address.logic.commands;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.List;
+import java.util.function.Predicate;
+
+import seedu.address.commons.core.index.Index;
+import seedu.address.commons.util.ToStringBuilder;
+import seedu.address.logic.Messages;
+import seedu.address.logic.commands.exceptions.CommandException;
+import seedu.address.model.Model;
+import seedu.address.model.listing.Listing;
+import seedu.address.model.listing.predicates.ListingContainsOwnerPredicate;
+import seedu.address.model.person.Person;
+
+/**
+ * Searches for {@code Listing}(s) that are owned by a {@code Person} identified using it's displayed index.
+ */
+public class SearchOwnerPropertyCommand extends Command {
+
+    public static final String COMMAND_WORD = "searchOwnerProperty";
+
+    public static final String MESSAGE_USAGE = COMMAND_WORD
+            + ": Finds all properties owned by a person identified by the index number "
+            + "used in the displayed person list.\n"
+            + "Parameters: PERSON_INDEX (must be a positive integer)\n"
+            + "Example: " + COMMAND_WORD + " 1";
+
+    public static final String MESSAGE_SEARCH_SELLER_PROPERTY_SUCCESS = "Searched Properties of Person: %1$s";
+
+    private final Index targetIndex;
+
+    /**
+     * Creates a {@code SearchOwnerPropertyCommand} to list the specified {@code Person}'s owned
+     * {@code Listing}s.
+     *
+     * @param targetIndex of the listing in the filtered listing list to delete
+     */
+    public SearchOwnerPropertyCommand(Index targetIndex) {
+        this.targetIndex = targetIndex;
+    }
+
+    /**
+     * Executes the search command and updates the filtered listing list in the model.
+     *
+     * @param model {@code Model} which the command should operate on.
+     * @return CommandResult with the number of matches found.
+     */
+    @Override
+    public CommandResult execute(Model model) throws CommandException {
+        requireNonNull(model);
+
+        List<Person> lastShownList = model.getFilteredPersonList();
+        if (targetIndex.getZeroBased() >= lastShownList.size()) {
+            throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);
+        }
+
+        Person targetPerson = lastShownList.get(targetIndex.getZeroBased());
+
+        searchSellerProperty(model, targetPerson);
+
+        return new CommandResult(String.format(MESSAGE_SEARCH_SELLER_PROPERTY_SUCCESS, Messages.format(targetPerson)));
+    }
+
+    private void searchSellerProperty(Model model, Person targetPerson) {
+        Predicate<Listing> predicate = new ListingContainsOwnerPredicate(targetPerson);
+        model.updateFilteredListingList(predicate);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (other == this) {
+            return true;
+        }
+
+        // instanceof handles nulls
+        if (!(other instanceof DeletePersonCommand)) {
+            return false;
+        }
+
+        SearchOwnerPropertyCommand otherDeletePersonCommand = (SearchOwnerPropertyCommand) other;
+        return targetIndex.equals(otherDeletePersonCommand.targetIndex);
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this)
+                .add("targetIndex", targetIndex)
+                .toString();
+    }
+}
diff --git a/src/main/java/seedu/address/logic/parser/AddressBookParser.java b/src/main/java/seedu/address/logic/parser/AddressBookParser.java
index c3c15893a7a..21a6fdef698 100644
--- a/src/main/java/seedu/address/logic/parser/AddressBookParser.java
+++ b/src/main/java/seedu/address/logic/parser/AddressBookParser.java
@@ -36,6 +36,7 @@
 import seedu.address.logic.commands.MatchPersonCommand;
 import seedu.address.logic.commands.OverwritePreferenceTagCommand;
 import seedu.address.logic.commands.OverwritePropertyTagCommand;
+import seedu.address.logic.commands.SearchOwnerPropertyCommand;
 import seedu.address.logic.commands.SearchPropertyByTagCommand;
 import seedu.address.logic.parser.exceptions.ParseException;
 
@@ -112,6 +113,9 @@ public Command parseCommand(String userInput) throws ParseException {
         case MatchPersonCommand.COMMAND_WORD:
             return new MatchPersonCommandParser().parse(arguments);
 
+        case SearchOwnerPropertyCommand.COMMAND_WORD:
+            return new SearchOwnerPropertyCommandParser().parse(arguments);
+
         case EditPersonCommand.COMMAND_WORD:
             return new EditPersonCommandParser().parse(arguments);
 
diff --git a/src/main/java/seedu/address/logic/parser/SearchOwnerPropertyCommandParser.java b/src/main/java/seedu/address/logic/parser/SearchOwnerPropertyCommandParser.java
new file mode 100644
index 00000000000..5d086117eee
--- /dev/null
+++ b/src/main/java/seedu/address/logic/parser/SearchOwnerPropertyCommandParser.java
@@ -0,0 +1,32 @@
+package seedu.address.logic.parser;
+
+import static seedu.address.logic.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX;
+
+import seedu.address.commons.core.index.Index;
+import seedu.address.logic.commands.SearchOwnerPropertyCommand;
+import seedu.address.logic.parser.exceptions.ParseException;
+
+/**
+ * Parses input arguments and creates a new {@code SearchOwnerPropertyCommandParser} object.
+ */
+public class SearchOwnerPropertyCommandParser implements Parser<SearchOwnerPropertyCommand> {
+
+    /**
+     * Parses the given {@code String} of arguments in the context of the SearchOwnerPropertyCommand
+     * and returns a SearchOwnerPropertyCommand object for execution.
+     *
+     * @param args arguments to be parsed.
+     * @throws ParseException if the user input does not conform the expected format
+     */
+    public SearchOwnerPropertyCommand parse(String args) throws ParseException {
+        try {
+            Index index = ParserUtil.parseIndex(args);
+            return new SearchOwnerPropertyCommand(index);
+        } catch (ParseException pe) {
+            throw new ParseException(
+                    String.format(MESSAGE_INVALID_PERSON_DISPLAYED_INDEX,
+                            SearchOwnerPropertyCommand.MESSAGE_USAGE), pe);
+        }
+    }
+
+}
diff --git a/src/main/java/seedu/address/model/listing/predicates/ListingContainsOwnerPredicate.java b/src/main/java/seedu/address/model/listing/predicates/ListingContainsOwnerPredicate.java
new file mode 100644
index 00000000000..737e1e7a43e
--- /dev/null
+++ b/src/main/java/seedu/address/model/listing/predicates/ListingContainsOwnerPredicate.java
@@ -0,0 +1,30 @@
+package seedu.address.model.listing.predicates;
+
+import java.util.function.Predicate;
+
+import seedu.address.model.listing.Listing;
+import seedu.address.model.person.Person;
+
+
+/**
+ * Tests if a {@code Listing} contains the specified owner.
+ */
+public class ListingContainsOwnerPredicate implements Predicate<Listing> {
+    private final Person personToMatch;
+
+    public ListingContainsOwnerPredicate(Person personToMatch) {
+        this.personToMatch = personToMatch;
+    }
+
+    @Override
+    public boolean test(Listing listing) {
+        return listing.getOwners().contains(personToMatch);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        return other == this
+                || (other instanceof ListingContainsOwnerPredicate
+                && personToMatch.equals(((ListingContainsOwnerPredicate) other).personToMatch));
+    }
+}


Reviews:
user: login: ToxOptimism
body: Looks quite good, though there are some issues to adjust for before merging. 
state: CHANGES_REQUESTED
author_association: NONE
submitted_at: 2025-03-24T08:39:15Z
user: login: ToxOptimism
body: LGTM!
state: APPROVED
author_association: NONE
submitted_at: 2025-03-24T13:22:48Z

Review comments:
diff_hunk: @@ -0,0 +1,103 @@
+package seedu.address.logic.commands;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+
+import seedu.address.commons.core.index.Index;
+import seedu.address.commons.util.ToStringBuilder;
+import seedu.address.logic.Messages;
+import seedu.address.logic.commands.exceptions.CommandException;
+import seedu.address.model.Model;
+import seedu.address.model.listing.Listing;
+import seedu.address.model.person.Person;
+
+/**
+ * Searches for {@code Listing}(s) that are owned by a {@code Person} identified using it's displayed index.
+ */
+public class SearchOwnerPropertyCommand extends Command {
+
+    public static final String COMMAND_WORD = "searchOwnerProperty";
+
+    public static final String MESSAGE_USAGE = COMMAND_WORD
+            + ": Finds all properties owned by a person identified by the index number "
+            + "used in the displayed person list.\n"
+            + "Parameters: INDEX (must be a positive integer)\n"
path: src/main/java/seedu/address/logic/commands/SearchOwnerPropertyCommand.java
user: login: ToxOptimism
body: Perhaps rename this as PERSON_INDEX for added clarity as to what parameter the command is looking for. 
created_at: 2025-03-24T08:35:12Z
author_association: NONE
diff_hunk: @@ -0,0 +1,103 @@
+package seedu.address.logic.commands;
+
+import static java.util.Objects.requireNonNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+
+import seedu.address.commons.core.index.Index;
+import seedu.address.commons.util.ToStringBuilder;
+import seedu.address.logic.Messages;
+import seedu.address.logic.commands.exceptions.CommandException;
+import seedu.address.model.Model;
+import seedu.address.model.listing.Listing;
+import seedu.address.model.person.Person;
+
+/**
+ * Searches for {@code Listing}(s) that are owned by a {@code Person} identified using it's displayed index.
+ */
+public class SearchOwnerPropertyCommand extends Command {
+
+    public static final String COMMAND_WORD = "searchOwnerProperty";
+
+    public static final String MESSAGE_USAGE = COMMAND_WORD
+            + ": Finds all properties owned by a person identified by the index number "
+            + "used in the displayed person list.\n"
+            + "Parameters: INDEX (must be a positive integer)\n"
+            + "Example: " + COMMAND_WORD + " 1";
+
+    public static final String MESSAGE_SEARCH_SELLER_PROPERTY_SUCCESS = "Searched Properties of Person: %1$s";
+
+    private final Index targetIndex;
+
+    /**
+     * Creates a {@code SearchOwnerPropertyCommand} to list the specified {@code Person}'s owned
+     * {@code Listing}s.
+     *
+     * @param targetIndex of the listing in the filtered listing list to delete
+     */
+    public SearchOwnerPropertyCommand(Index targetIndex) {
+        this.targetIndex = targetIndex;
+    }
+
+    /**
+     * Executes the search command and updates the filtered listing list in the model.
+     *
+     * @param model {@code Model} which the command should operate on.
+     * @return CommandResult with the number of matches found.
+     */
+    @Override
+    public CommandResult execute(Model model) throws CommandException {
+        requireNonNull(model);
+
+        List<Person> lastShownList = model.getFilteredPersonList();
+        if (targetIndex.getZeroBased() >= lastShownList.size()) {
+            throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);
+        }
+
+        Person targetPerson = lastShownList.get(targetIndex.getZeroBased());
+
+        searchSellerProperty(model, targetPerson);
+
+        return new CommandResult(String.format(MESSAGE_SEARCH_SELLER_PROPERTY_SUCCESS, Messages.format(targetPerson)));
+    }
+
+    private void searchSellerProperty(Model model, Person targetPerson) {
+        ArrayList<Listing> ownedListings = new ArrayList<>();
+
+        model.updateFilteredListingList(model.PREDICATE_SHOW_ALL_LISTINGS);
+        model.updateSortedFilteredListingList(model.COMPARATOR_SHOW_ALL_LISTINGS);
+
+        for (Listing listing : model.getFilteredListingList()) {
+            if (listing.getOwners().contains(targetPerson)) {
+                ownedListings.add(listing);
+            }
+        }
+
+        Predicate<Listing> predicate = listing -> ownedListings.contains(listing);
path: src/main/java/seedu/address/logic/commands/SearchOwnerPropertyCommand.java
user: login: ToxOptimism
body: Perhaps format the execution of the search to utilize a predicate class such that its standardized with other similar commands?
created_at: 2025-03-24T08:38:40Z
author_association: NONE

PR comments:
user: login: codecov[bot]
created_at: 2025-03-24T06:57:28Z
body: ## [Codecov](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) Report
Attention: Patch coverage is `0%` with `36 lines` in your changes missing coverage. Please review.

| [Files with missing lines](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) | Patch % | Lines |
|---|---|---|
| [...ess/logic/commands/SearchOwnerPropertyCommand.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fcommands%2FSearchOwnerPropertyCommand.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL2NvbW1hbmRzL1NlYXJjaE93bmVyUHJvcGVydHlDb21tYW5kLmphdmE=) | 0.00% | [22 Missing :warning: ](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) |
| [...logic/parser/SearchOwnerPropertyCommandParser.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fparser%2FSearchOwnerPropertyCommandParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL3BhcnNlci9TZWFyY2hPd25lclByb3BlcnR5Q29tbWFuZFBhcnNlci5qYXZh) | 0.00% | [6 Missing :warning: ](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) |
| [...ting/predicates/ListingContainsOwnerPredicate.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Fmodel%2Flisting%2Fpredicates%2FListingContainsOwnerPredicate.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL21vZGVsL2xpc3RpbmcvcHJlZGljYXRlcy9MaXN0aW5nQ29udGFpbnNPd25lclByZWRpY2F0ZS5qYXZh) | 0.00% | [6 Missing :warning: ](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) |
| [...u/address/logic/commands/AssignListingCommand.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fcommands%2FAssignListingCommand.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL2NvbW1hbmRzL0Fzc2lnbkxpc3RpbmdDb21tYW5kLmphdmE=) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) |
| [.../seedu/address/logic/parser/AddressBookParser.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fparser%2FAddressBookParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL3BhcnNlci9BZGRyZXNzQm9va1BhcnNlci5qYXZh) | 0.00% | [1 Missing :warning: ](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) |

| [Files with missing lines](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3) | Coverage Δ | Complexity Δ | |
|---|---|---|---|
| [...u/address/logic/commands/AssignListingCommand.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fcommands%2FAssignListingCommand.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL2NvbW1hbmRzL0Fzc2lnbkxpc3RpbmdDb21tYW5kLmphdmE=) | `0.00% <0.00%> (ø)` | `0.00 <0.00> (ø)` | |
| [.../seedu/address/logic/parser/AddressBookParser.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fparser%2FAddressBookParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL3BhcnNlci9BZGRyZXNzQm9va1BhcnNlci5qYXZh) | `43.90% <0.00%> (-1.10%)` | `11.00 <0.00> (ø)` | |
| [...logic/parser/SearchOwnerPropertyCommandParser.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fparser%2FSearchOwnerPropertyCommandParser.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL3BhcnNlci9TZWFyY2hPd25lclByb3BlcnR5Q29tbWFuZFBhcnNlci5qYXZh) | `0.00% <0.00%> (ø)` | `0.00 <0.00> (?)` | |
| [...ting/predicates/ListingContainsOwnerPredicate.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Fmodel%2Flisting%2Fpredicates%2FListingContainsOwnerPredicate.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL21vZGVsL2xpc3RpbmcvcHJlZGljYXRlcy9MaXN0aW5nQ29udGFpbnNPd25lclByZWRpY2F0ZS5qYXZh) | `0.00% <0.00%> (ø)` | `0.00 <0.00> (?)` | |
| [...ess/logic/commands/SearchOwnerPropertyCommand.java](https://app.codecov.io/gh/AY2425S2-CS2103-F08-3/tp/pull/217?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fseedu%2Faddress%2Flogic%2Fcommands%2FSearchOwnerPropertyCommand.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103-F08-3#diff-c3JjL21haW4vamF2YS9zZWVkdS9hZGRyZXNzL2xvZ2ljL2NvbW1hbmRzL1NlYXJjaE93bmVyUHJvcGVydHlDb21tYW5kLmphdmE=) | `0.00% <0.00%> (ø)` | `0.00 <0.00> (?)` | |

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
author_association: NONE
user: login: Ryuse
created_at: 2025-03-24T07:40:49Z
body: Renamed command to `searchOwnerProperty`

## Demo:
Before
![image](https://github.com/user-attachments/assets/833cc5c8-c04f-45a5-aba0-fd35803ef2c9)

After `searchOwnerProperty 1`
![image](https://github.com/user-attachments/assets/8720cf78-497d-40e4-84da-b090ec3c1a33)

author_association: NONE