aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Data/Entities/ActivityLog.cs
blob: 620e82830696847959df027b846cced078bc9bf5 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Jellyfin.Data.Interfaces;
using Microsoft.Extensions.Logging;

namespace Jellyfin.Data.Entities
{
    /// <summary>
    /// An entity referencing an activity log entry.
    /// </summary>
    public class ActivityLog : IHasConcurrencyToken
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ActivityLog"/> class.
        /// Public constructor with required data.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="type">The type.</param>
        /// <param name="userId">The user id.</param>
        public ActivityLog(string name, string type, Guid userId)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }

            if (string.IsNullOrEmpty(type))
            {
                throw new ArgumentNullException(nameof(type));
            }

            Name = name;
            Type = type;
            UserId = userId;
            DateCreated = DateTime.UtcNow;
            LogSeverity = LogLevel.Trace;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="ActivityLog"/> class.
        /// Default constructor. Protected due to required properties, but present because EF needs it.
        /// </summary>
        protected ActivityLog()
        {
        }

        /// <summary>
        /// Gets or sets the identity of this instance.
        /// This is the key in the backing database.
        /// </summary>
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; protected set; }

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <remarks>
        /// Required, Max length = 512.
        /// </remarks>
        [Required]
        [MaxLength(512)]
        [StringLength(512)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or sets the overview.
        /// </summary>
        /// <remarks>
        /// Max length = 512.
        /// </remarks>
        [MaxLength(512)]
        [StringLength(512)]
        public string Overview { get; set; }

        /// <summary>
        /// Gets or sets the short overview.
        /// </summary>
        /// <remarks>
        /// Max length = 512.
        /// </remarks>
        [MaxLength(512)]
        [StringLength(512)]
        public string ShortOverview { get; set; }

        /// <summary>
        /// Gets or sets the type.
        /// </summary>
        /// <remarks>
        /// Required, Max length = 256.
        /// </remarks>
        [Required]
        [MaxLength(256)]
        [StringLength(256)]
        public string Type { get; set; }

        /// <summary>
        /// Gets or sets the user id.
        /// </summary>
        /// <remarks>
        /// Required.
        /// </remarks>
        public Guid UserId { get; set; }

        /// <summary>
        /// Gets or sets the item id.
        /// </summary>
        /// <remarks>
        /// Max length = 256.
        /// </remarks>
        [MaxLength(256)]
        [StringLength(256)]
        public string ItemId { get; set; }

        /// <summary>
        /// Gets or sets the date created. This should be in UTC.
        /// </summary>
        /// <remarks>
        /// Required.
        /// </remarks>
        public DateTime DateCreated { get; set; }

        /// <summary>
        /// Gets or sets the log severity. Default is <see cref="LogLevel.Trace"/>.
        /// </summary>
        /// <remarks>
        /// Required.
        /// </remarks>
        public LogLevel LogSeverity { get; set; }

        /// <inheritdoc />
        [ConcurrencyCheck]
        public uint RowVersion { get; set; }

        /// <inheritdoc />
        public void OnSavingChanges()
        {
            RowVersion++;
        }
    }
}