diff options
author | crupest <crupest@outlook.com> | 2020-02-04 18:02:39 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-02-04 18:02:39 +0800 |
commit | 03c9d4edc4e321db8c1b70ae621f77fa89664dfc (patch) | |
tree | 458d802973d4768e4bd5d463540608404b86c309 /Timeline/Services | |
parent | 7cf188134086c5d878cd3230345e89fc10b7e2ca (diff) | |
download | timeline-03c9d4edc4e321db8c1b70ae621f77fa89664dfc.tar.gz timeline-03c9d4edc4e321db8c1b70ae621f77fa89664dfc.tar.bz2 timeline-03c9d4edc4e321db8c1b70ae621f77fa89664dfc.zip |
Add get timeline list feature.
Diffstat (limited to 'Timeline/Services')
-rw-r--r-- | Timeline/Services/TimelineService.cs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Timeline/Services/TimelineService.cs b/Timeline/Services/TimelineService.cs index 6f9d437e..67a57deb 100644 --- a/Timeline/Services/TimelineService.cs +++ b/Timeline/Services/TimelineService.cs @@ -229,6 +229,16 @@ namespace Timeline.Services public interface ITimelineService : IBaseTimelineService
{
/// <summary>
+ /// Get all timelines including personal timelines.
+ /// </summary>
+ /// <param name="relatedUserId">Filter timelines related (own or is a member) to specific user.</param>
+ /// <returns>The list of timelines.</returns>
+ /// <remarks>
+ /// If user with related user id does not exist, empty list will be returned.
+ /// </remarks>
+ Task<List<TimelineInfo>> GetTimelines(long? relatedUserId = null);
+
+ /// <summary>
/// Create a timeline.
/// </summary>
/// <param name="name">The name of the timeline.</param>
@@ -618,6 +628,44 @@ namespace Timeline.Services }
}
+ public async Task<List<TimelineInfo>> GetTimelines(long? relatedUserId = null)
+ {
+ List<TimelineEntity> entities;
+
+ if (relatedUserId == null)
+ {
+ entities = await Database.Timelines.Include(t => t.Members).ToListAsync();
+ }
+ else
+ {
+ var timelineAsMemberIds = await Database.TimelineMembers.Where(m => m.UserId == relatedUserId).Select(m => m.TimelineId).ToListAsync();
+ entities = await Database.Timelines.Where(t => t.OwnerId == relatedUserId || timelineAsMemberIds.Contains(t.Id)).Include(t => t.Members).ToListAsync();
+ }
+
+ var result = new List<TimelineInfo>();
+
+ foreach (var entity in entities)
+ {
+ var timeline = new TimelineInfo
+ {
+ Name = entity.Name,
+ Description = entity.Description ?? "",
+ Owner = Mapper.Map<UserInfo>(await UserService.GetUserById(entity.OwnerId)),
+ Visibility = entity.Visibility,
+ Members = new List<UserInfo>()
+ };
+
+ foreach (var m in entity.Members)
+ {
+ timeline.Members.Add(Mapper.Map<UserInfo>(await UserService.GetUserById(m.UserId)));
+ }
+
+ result.Add(timeline);
+ }
+
+ return result;
+ }
+
public async Task<TimelineInfo> CreateTimeline(string name, long owner)
{
if (name == null)
|