summaryrefslogtreecommitdiff
path: root/CoreWiki/Models/Comment.cs
blob: 4f1026a227faf8d6b7c5326bcadf85e1a98a5e16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System.Buffers.Text;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.VisualBasic;
using NodaTime;
using NodaTime.Extensions;

namespace CoreWiki.Models;

public class Comment
{
    public int Id { get; set; }
    [Required]
    public int ArticleId { get; set; }
    [Required]
    [DisplayName("Display Name")]
    public string? DisplayName { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    [DisplayName("E-Mail")]
    public string? EMail { get; set; }
    [NotMapped]
    public string? GravatarHash
    {
        get
        {
            if (EMail == null)
            {
                return null;
            }
            var normalizedEmail = EMail.Trim().ToLower();
            var bytes = SHA256.HashData(Encoding.UTF8.GetBytes(normalizedEmail));
            return BitConverter.ToString(bytes).Replace("-", "").ToLower();
        }
    }
    [Required]
    public string? Content { get; set; }
    [NotMapped]
    public Instant Submitted { get; set; }
    [Obsolete("This property only exists for EF-serialization purposes")]
    [DataType(DataType.DateTime)]
    [Column("Submitted")]
    public DateTime SubmittedDateTime
    {
        get => Submitted.ToDateTimeUtc();
        // TODO: Remove this ugly hack
        set => Submitted = DateTime.SpecifyKind(value, DateTimeKind.Utc).ToInstant();
    }
    
    public required Article Article { get; set; }
}