techlinks.in
Low Level Design (LLD) Coding

Follow

Low Level Design (LLD) Coding

Follow

Design a news feed - Machine Coding

techlinks.in's photo
techlinks.in
·Jan 13, 2023·

3 min read

Play this article

Designing a news feed system using object-oriented programming in a language like Java would involve creating several classes to represent different aspects of the system. Here is an example of how the classes might be organized:

  1. Article class - This class would represent an individual article in the news feed. It would have properties such as the title, author, content, and timestamp of the article.

  2. User class - This class would represent a user of the news feed. It would have properties such as the user's name, email, and list of subscribed topics. It would also have methods to subscribe or unsubscribe from topics.

  3. Topic class - This class would represent a topic that articles can be categorized under. It would have properties such as the topic name and a list of articles associated with that topic.

  4. NewsFeed class - This class would be the main class of the system. It would have properties such as a list of articles, list of users, and list of topics. It would also have methods to add or remove articles, add or remove users, and add or remove topics. It would also have methods to return a list of articles based on topic, user and time.

Here is an example of how the classes might be implemented:

public class Article {
    private String title;
    private String author;
    private String content;
    private LocalDateTime timestamp;
    private List<Topic> topics;

    public Article(String title, String author, String content, LocalDateTime timestamp, List<Topic> topics) {
        this.title = title;
        this.author = author;
        this.content = content;
        this.timestamp = timestamp;
        this.topics = topics;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public String getContent() {
        return content;
    }

    public LocalDateTime getTimestamp() {
        return timestamp;
    }

    public List<Topic> getTopics() {
        return topics;
    }
}
public class User {
    private String name;
    private String email;
    private List<Topic> subscribedTopics;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
        this.subscribedTopics = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public List<Topic> getSubscribedTopics() {
        return subscribedTopics;
    }

    public void subscribeToTopic(Topic topic) {
        subscribedTopics.add(topic);
    }

    public void unsubscribeFromTopic(Topic topic) {
        subscribedTopics.remove(topic);
    }
}
public class Topic {
    private String name;
    private List<Article> articles;

    public Topic(String name) {
        this.name = name;
        this.articles = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<Article> getArticles() {
        return articles;
    }

    public void addArticle(Article article) {
        articles.add(article);
    }

    public void removeArticle(Article article) {
        articles.remove(article);
    }
}
public class NewsFeed {
    private List<Article> articles;
    private List<User> users;
    private List<Topic> topics;

    public NewsFeed() {
        this.articles = new ArrayList<>();
        this.users = new ArrayList<>();
        this.topics = new ArrayList<>();
    }

    public List<Article> getArticles() {
        return articles;
    }

    public List<User> getUsers() {
        return users;
    }

    public List<Topic> getTopics() {
        return topics;
    }

    public void addArticle(Article article) {
        articles.add(article);
    }

    public void removeArticle(Article article) {
        articles.remove(article);
    }

    public void addUser(User user) {
        users.add(user);
    }

    public void removeUser(User user) {
        users.remove(user);
    }

    public void addTopic(Topic topic) {
        topics.add(topic);
    }

    public void removeTopic(Topic topic) {
        topics.remove(topic);
    }

    public List<Article> getArticlesByTopic(Topic topic) {
        return topic.getArticles();
    }

    public List<Article> getArticlesByUser(User user) {
        List<Article> userArticles = new ArrayList<>();
        for (Article article : articles) {
            if (article.getAuthor().equals(user.getName())) {
                userArticles.add(article);
            }
        }
        return userArticles;
    }

    public List<Article> getArticlesByTimePeriod(LocalDateTime start, LocalDateTime end) {
        List<Article> articlesByTime = new ArrayList<>();
        for (Article article : articles) {
            if (article.getTimestamp().isAfter(start) && article.getTimestamp().isBefore(end)) {
                articlesByTime.add(article);
            }
        }
        return articlesByTime;
    }
}

Did you find this article valuable?

Support techlinks.in by becoming a sponsor. Any amount is appreciated!

See recent sponsors Learn more about Hashnode Sponsors
 
Share this