Skip to content

Commit 892d274

Browse files
committed
task 1 completed
1 parent fbb39b4 commit 892d274

File tree

4 files changed

+131
-8
lines changed

4 files changed

+131
-8
lines changed

Twitter.Core/Class1.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

Twitter.Core/Tweet.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
3+
namespace Twitter.Core
4+
{
5+
public class Tweet
6+
{
7+
public readonly int Id;
8+
public readonly string UserName;
9+
public readonly string Message;
10+
public readonly DateTime PostedAt;
11+
12+
public Tweet(int id, string userName, string message, DateTime postedAt)
13+
{
14+
Id = id;
15+
UserName = userName;
16+
Message = message;
17+
PostedAt = postedAt;
18+
}
19+
}
20+
}

Twitter.Core/Twitter.cs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
5+
namespace Twitter.Core
6+
{
7+
public class Twitter
8+
{
9+
private int nextTweetId = 1;
10+
11+
/// <summary>
12+
/// Users indexed by user name
13+
/// </summary>
14+
public IDictionary<string, User> UsersByName { get; private set; }
15+
16+
/// <summary>
17+
/// Tweets ordered id.
18+
/// </summary>
19+
public IDictionary<int, Tweet> AllTweets { get; private set; }
20+
21+
public Twitter()
22+
{
23+
AllTweets = new SortedDictionary<int, Tweet>();
24+
UsersByName = new SortedDictionary<string, User>();
25+
}
26+
27+
public int PostTweet(string userName, string message, DateTime when)
28+
{
29+
EnsureUserExists(userName);
30+
var tweet = new Tweet(nextTweetId++, userName, message, when);
31+
AllTweets.Add(tweet.Id, tweet);
32+
return tweet.Id;
33+
}
34+
35+
public void Follow(string followerName, string followeeName)
36+
{
37+
if (UsersByName.TryGetValue(followerName, out var follower))
38+
{
39+
if (UsersByName.TryGetValue(followeeName, out var followee))
40+
{
41+
follower.Followees.Add(followee);
42+
followee.Followers.Add(follower);
43+
return;
44+
}
45+
throw new ArgumentException("No such user: " + followeeName);
46+
}
47+
throw new ArgumentException("No such user: " + followerName);
48+
}
49+
50+
public Tweet[] GetAllTweets(int skip = 0, int take = 20)
51+
{
52+
return AllTweets
53+
.Values
54+
.Skip(skip)
55+
.Take(take)
56+
.ToArray();
57+
}
58+
59+
public Tweet[] GetUserTweets(string userName, int skip = 0, int take = 20)
60+
{
61+
if (UsersByName.TryGetValue(userName, out var user))
62+
{
63+
return user.Tweets.Skip(skip).Take(take).ToArray();
64+
}
65+
throw new ArgumentException("No such user: " + userName);
66+
}
67+
68+
private void EnsureUserExists(string userName)
69+
{
70+
if (!UsersByName.ContainsKey(userName))
71+
{
72+
var user = new User(userName);
73+
UsersByName.Add(userName, user);
74+
}
75+
}
76+
}
77+
}

Twitter.Core/User.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Collections.Generic;
2+
3+
namespace Twitter.Core
4+
{
5+
public class User
6+
{
7+
public readonly string Name;
8+
9+
/// <summary>
10+
/// This users tweets
11+
/// </summary>
12+
public List<Tweet> Tweets { get; private set; }
13+
14+
/// <summary>
15+
/// Users that follow this user
16+
/// </summary>
17+
/// <value>The followers.</value>
18+
public List<User> Followers { get; private set; }
19+
20+
/// <summary>
21+
/// Users this user follows
22+
/// </summary>
23+
public List<User> Followees { get; private set; }
24+
25+
public User(string name)
26+
{
27+
Name = name;
28+
Tweets = new List<Tweet>();
29+
Followees = new List<User>();
30+
Followers = new List<User>();
31+
}
32+
33+
}
34+
}

0 commit comments

Comments
 (0)