Managing Product Reviews and Data Aggregation in C#

Managing Product Reviews and Data Aggregation in C#

Hello, and welcome to today's lesson! Today, we are going to dive into the world of managing product reviews and applying data aggregation in practice. We will start with a relatively simple Starter Task to set up our base and then gradually build up to a more complex solution involving data aggregation. Let's jump in!

Starter Task Methods

For our starter task, we will lay the foundation by implementing basic operations for managing product reviews. These are the methods we will need to implement:

  • addReview(string productId, string reviewId, string reviewText, int rating) — adds a review to the product specified by productId. If a review with reviewId already exists, it updates the existing review. The review contains a flagged field which indicates whether the review is marked as inappropriate (by default, this field is set to false). Returns true if the review was added or updated successfully, false otherwise.

  • getReview(string productId, string reviewId) — returns the review details (reviewText, rating, and flagged fields) for the review specified by reviewId under the given productId. If the review or product does not exist, returns null.

  • deleteReview(string productId, string reviewId) — deletes the review specified by reviewId under the given productId. Returns true if the review was deleted, false, otherwise.

Starter Task Implementation

Let's look at the code that implements these functionalities:

using System;
using System.Collections.Generic;

public class ReviewManager
{
    private Dictionary<string, Dictionary<string, Review>> products = new Dictionary<string, Dictionary<string, Review>>();

    public bool addReview(string productId, string reviewId, string reviewText, int rating)
    {
        if (rating < 1 || rating > 5) return false; // Invalid rating

        if (!products.ContainsKey(productId))
        {
            products[productId] = new Dictionary<string, Review>();
        }

        products[productId][reviewId] = new Review { Text = reviewText, Rating = rating, Flagged = false };
        return true;
    }

    public Review getReview(string productId, string reviewId)
    {
        if (products.ContainsKey(productId) && products[productId].ContainsKey(reviewId))
        {
            return products[productId][reviewId];
        }
        return null;
    }

    public bool deleteReview(string productId, string reviewId)
    {
        if (products.ContainsKey(productId) && products[productId].ContainsKey(reviewId))
        {
            products[productId].Remove(reviewId);
            if (products[productId].Count == 0) products.Remove(productId);
            return true;
        }
        return false;
    }
}

public class Review
{
    public string Text { get; set; }
    public int Rating { get; set; }
    public bool Flagged { get; set; }
}

public class Program
{
    public static void Main()
    {
        ReviewManager reviewManager = new ReviewManager();

        // Adding some reviews
        reviewManager.addReview("p1", "r1", "Great product!", 5);
        reviewManager.addReview("p1", "r2", "Not bad", 3);

        // Testing getReview method
        var review1 = reviewManager.getReview("p1", "r1");
        if (review1 != null) Console.WriteLine($"Review1: {review1.Text}, Rating: {review1.Rating}, Flagged: {review1.Flagged}");
        else Console.WriteLine("Review not found");

        var review2 = reviewManager.getReview("p1", "r3");
        if (review2 != null) Console.WriteLine($"Review2: {review2.Text}, Rating: {review2.Rating}, Flagged: {review2.Flagged}");
        else Console.WriteLine("Review not found");

        // Testing deleteReview method
        Console.WriteLine($"Delete review r2: {reviewManager.deleteReview("p1", "r2")}");
        var review3 = reviewManager.getReview("p1", "r2");
        if (review3 != null) Console.WriteLine($"Review3: {review3.Text}, Rating: {review3.Rating}, Flagged: {review3.Flagged}");
        else Console.WriteLine("Review not found");
    }
}

This code establishes the foundational methods needed for managing product reviews within a ReviewManager class. The addReview method allows for adding a new review or updating an existing one, ensuring each review contains valid rating values between 1 and 5. The getReview method retrieves the review details for a specific product, including the review text and rating, returning null if the product or review doesn't exist. The deleteReview method facilitates the removal of a specific review, and if no reviews are left for a product, the product itself is removed from the product list. Together, these methods form the basic operations required to manage a collection of product reviews efficiently.

Now, let's extend this with new features.

Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal