using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using Timeline.Controllers;
namespace Timeline.Models.Http
{
public enum TimelineVisibility
{
///
/// All people including those without accounts.
///
Public,
///
/// Only people signed in.
///
Register,
///
/// Only member.
///
Private
}
public class TimelinePostInfo
{
public long Id { get; set; }
public string Content { get; set; } = default!;
public DateTime Time { get; set; }
public UserInfo Author { get; set; } = default!;
public DateTime LastUpdated { get; set; } = default!;
}
public class TimelineInfo
{
public string? Name { get; set; }
public string Description { get; set; } = default!;
public UserInfo Owner { get; set; } = default!;
public TimelineVisibility Visibility { get; set; }
#pragma warning disable CA2227 // Collection properties should be read only
public List Members { get; set; } = default!;
#pragma warning restore CA2227 // Collection properties should be read only
#pragma warning disable CA1707 // Identifiers should not contain underscores
public TimelineInfoLinks? _links { get; set; }
#pragma warning restore CA1707 // Identifiers should not contain underscores
}
public class TimelineInfoLinks
{
public string Self { get; set; } = default!;
public string Posts { get; set; } = default!;
}
public static class TimelineInfoExtensions
{
public static TimelineInfo FillLinks(this TimelineInfo info, IUrlHelper urlHelper)
{
if (info == null)
throw new ArgumentNullException(nameof(info));
if (urlHelper == null)
throw new ArgumentNullException(nameof(urlHelper));
if (string.IsNullOrEmpty(info.Name))
{
info._links = new TimelineInfoLinks
{
Self = urlHelper.ActionLink(nameof(PersonalTimelineController.TimelineGet), nameof(PersonalTimelineController)[0..^nameof(Controller).Length], new { info.Owner.Username }),
Posts = urlHelper.ActionLink(nameof(PersonalTimelineController.PostListGet), nameof(PersonalTimelineController)[0..^nameof(Controller).Length], new { info.Owner.Username })
};
}
else
{
info._links = new TimelineInfoLinks
{
Self = urlHelper.ActionLink(nameof(TimelineController.TimelineGet), nameof(TimelineController)[0..^nameof(Controller).Length], new { info.Name }),
Posts = urlHelper.ActionLink(nameof(TimelineController.PostListGet), nameof(TimelineController)[0..^nameof(Controller).Length], new { info.Name })
};
}
return info;
}
}
}