aboutsummaryrefslogtreecommitdiff
path: root/src/Web/DevHive.Web.Models
diff options
context:
space:
mode:
authorKamen Mladenov <kamen.d.mladenov@protonmail.com>2021-04-09 19:51:35 +0300
committerGitHub <noreply@github.com>2021-04-09 19:51:35 +0300
commit233f38915ba0079079233eff55434ef349c05c45 (patch)
tree6c5f69017865bcab87355e910c87339453da1406 /src/Web/DevHive.Web.Models
parentf4a70c6430db923af9fa9958a11c2d6612cb52cc (diff)
parenta992357efcf1bc1ece81b95ecee5e05a0b73bfdc (diff)
downloadDevHive-heroku/main.tar
DevHive-heroku/main.tar.gz
DevHive-heroku/main.zip
Merge pull request #28 from Team-Kaleidoscope/devHEADv0.2mainheroku/main
Second stage: Complete
Diffstat (limited to 'src/Web/DevHive.Web.Models')
-rw-r--r--src/Web/DevHive.Web.Models/Attributes/GoodPasswordAttribute.cs23
-rw-r--r--src/Web/DevHive.Web.Models/Attributes/OnlyLettersModelValidation.cs20
-rw-r--r--src/Web/DevHive.Web.Models/Comment/CreateCommentWebModel.cs17
-rw-r--r--src/Web/DevHive.Web.Models/Comment/ReadCommentWebModel.cs21
-rw-r--r--src/Web/DevHive.Web.Models/Comment/UpdateCommentWebModel.cs13
-rw-r--r--src/Web/DevHive.Web.Models/DevHive.Web.Models.csproj13
-rw-r--r--src/Web/DevHive.Web.Models/Feed/GetPageWebModel.cs19
-rw-r--r--src/Web/DevHive.Web.Models/Feed/ReadPageWebModel.cs10
-rw-r--r--src/Web/DevHive.Web.Models/Language/CreateLanguageWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/Language/LanguageWebModel.cs13
-rw-r--r--src/Web/DevHive.Web.Models/Language/ReadLanguageWebModel.cs11
-rw-r--r--src/Web/DevHive.Web.Models/Language/UpdateLanguageWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/Post/CreatePostWebModel.cs16
-rw-r--r--src/Web/DevHive.Web.Models/Post/ReadPostWebModel.cs27
-rw-r--r--src/Web/DevHive.Web.Models/Post/UpdatePostWebModel.cs21
-rw-r--r--src/Web/DevHive.Web.Models/ProfilePicture/ProfilePictureWebModel.cs9
-rw-r--r--src/Web/DevHive.Web.Models/Rating/CreateRatingWebModel.cs11
-rw-r--r--src/Web/DevHive.Web.Models/Rating/ReadRatingWebModel.cs15
-rw-r--r--src/Web/DevHive.Web.Models/Rating/UpdateRatingWebModel.cs13
-rw-r--r--src/Web/DevHive.Web.Models/Role/CreateRoleWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/Role/RoleWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/Role/UpdateRoleWebModel.cs15
-rw-r--r--src/Web/DevHive.Web.Models/Technology/CreateTechnologyWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/Technology/ReadTechnologyWebModel.cs11
-rw-r--r--src/Web/DevHive.Web.Models/Technology/TechnologyWebModel.cs13
-rw-r--r--src/Web/DevHive.Web.Models/Technology/UpdateTechnologyWebModel.cs15
-rw-r--r--src/Web/DevHive.Web.Models/User/BaseUserWebModel.cs34
-rw-r--r--src/Web/DevHive.Web.Models/User/LoginWebModel.cs20
-rw-r--r--src/Web/DevHive.Web.Models/User/RegisterWebModel.cs14
-rw-r--r--src/Web/DevHive.Web.Models/User/TokenWebModel.cs12
-rw-r--r--src/Web/DevHive.Web.Models/User/UpdateUserWebModel.cs34
-rw-r--r--src/Web/DevHive.Web.Models/User/UserWebModel.cs33
-rw-r--r--src/Web/DevHive.Web.Models/User/UsernameWebModel.cs15
33 files changed, 558 insertions, 0 deletions
diff --git a/src/Web/DevHive.Web.Models/Attributes/GoodPasswordAttribute.cs b/src/Web/DevHive.Web.Models/Attributes/GoodPasswordAttribute.cs
new file mode 100644
index 0000000..c452499
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Attributes/GoodPasswordAttribute.cs
@@ -0,0 +1,23 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace DevHive.Web.Models.Attributes
+{
+ public class GoodPasswordAttribute : ValidationAttribute
+ {
+ public override bool IsValid(object value)
+ {
+ var stringValue = (string)value;
+
+ for (int i = 0; i < stringValue.Length; i++)
+ {
+ if (char.IsDigit(stringValue[i]))
+ {
+ base.ErrorMessage = "Password must be atleast 5 characters long!";
+ return stringValue.Length >= 5;
+ }
+ }
+ base.ErrorMessage = "Password must contain atleast 1 digit!";
+ return false;
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Attributes/OnlyLettersModelValidation.cs b/src/Web/DevHive.Web.Models/Attributes/OnlyLettersModelValidation.cs
new file mode 100644
index 0000000..faaeee4
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Attributes/OnlyLettersModelValidation.cs
@@ -0,0 +1,20 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+
+namespace DevHive.Web.Models.Attributes
+{
+ public class OnlyLettersAttribute : ValidationAttribute
+ {
+ public override bool IsValid(object value)
+ {
+ var stringValue = (string)value;
+
+ foreach (char ch in stringValue)
+ {
+ if (!char.IsLetter(ch))
+ return false;
+ }
+ return true;
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Comment/CreateCommentWebModel.cs b/src/Web/DevHive.Web.Models/Comment/CreateCommentWebModel.cs
new file mode 100644
index 0000000..8b2bf8d
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Comment/CreateCommentWebModel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Comment
+{
+ public class CreateCommentWebModel
+ {
+ [NotNull]
+ [Required]
+ public Guid PostId { get; set; }
+
+ [NotNull]
+ [Required]
+ public string Message { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Comment/ReadCommentWebModel.cs b/src/Web/DevHive.Web.Models/Comment/ReadCommentWebModel.cs
new file mode 100644
index 0000000..4d3aff7
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Comment/ReadCommentWebModel.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace DevHive.Web.Models.Comment
+{
+ public class ReadCommentWebModel
+ {
+ public Guid CommentId { get; set; }
+
+ public Guid PostId { get; set; }
+
+ public string IssuerFirstName { get; set; }
+
+ public string IssuerLastName { get; set; }
+
+ public string IssuerUsername { get; set; }
+
+ public string Message { get; set; }
+
+ public DateTime TimeCreated { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Comment/UpdateCommentWebModel.cs b/src/Web/DevHive.Web.Models/Comment/UpdateCommentWebModel.cs
new file mode 100644
index 0000000..b5d7970
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Comment/UpdateCommentWebModel.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace DevHive.Web.Models.Comment
+{
+ public class UpdateCommentWebModel
+ {
+ public Guid CommentId { get; set; }
+
+ public Guid PostId { get; set; }
+
+ public string NewMessage { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/DevHive.Web.Models.csproj b/src/Web/DevHive.Web.Models/DevHive.Web.Models.csproj
new file mode 100644
index 0000000..79c856f
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/DevHive.Web.Models.csproj
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <TargetFramework>net5.0</TargetFramework>
+ </PropertyGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Common\DevHive.Common\DevHive.Common.csproj"/>
+ <ProjectReference Include="..\..\Common\DevHive.Common.Models\DevHive.Common.Models.csproj"/>
+ </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2"/>
+ <PackageReference Include="SonarAnalyzer.CSharp" Version="8.20.0.28934"/>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/src/Web/DevHive.Web.Models/Feed/GetPageWebModel.cs b/src/Web/DevHive.Web.Models/Feed/GetPageWebModel.cs
new file mode 100644
index 0000000..4ea44cc
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Feed/GetPageWebModel.cs
@@ -0,0 +1,19 @@
+using System;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace DevHive.Web.Models.Feed
+{
+ public class GetPageWebModel
+ {
+ [Range(1, int.MaxValue)]
+ public int PageNumber { get; set; }
+
+ [Required]
+ public DateTime FirstPageTimeIssued { get; set; }
+
+ [DefaultValue(5)]
+ [Range(1, int.MaxValue)]
+ public int PageSize { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Feed/ReadPageWebModel.cs b/src/Web/DevHive.Web.Models/Feed/ReadPageWebModel.cs
new file mode 100644
index 0000000..f429313
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Feed/ReadPageWebModel.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using DevHive.Web.Models.Post;
+
+namespace DevHive.Web.Models.Comment
+{
+ public class ReadPageWebModel
+ {
+ public List<ReadPostWebModel> Posts { get; set; } = new();
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Language/CreateLanguageWebModel.cs b/src/Web/DevHive.Web.Models/Language/CreateLanguageWebModel.cs
new file mode 100644
index 0000000..a739e7f
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Language/CreateLanguageWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Language
+{
+ public class CreateLanguageWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Language/LanguageWebModel.cs b/src/Web/DevHive.Web.Models/Language/LanguageWebModel.cs
new file mode 100644
index 0000000..7515e70
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Language/LanguageWebModel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Language
+{
+ public class LanguageWebModel
+ {
+ [NotNull]
+ [Required]
+ public Guid Id { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Language/ReadLanguageWebModel.cs b/src/Web/DevHive.Web.Models/Language/ReadLanguageWebModel.cs
new file mode 100644
index 0000000..3d9d5b6
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Language/ReadLanguageWebModel.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace DevHive.Web.Models.Language
+{
+ public class ReadLanguageWebModel
+ {
+ public Guid Id { get; set; }
+
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Language/UpdateLanguageWebModel.cs b/src/Web/DevHive.Web.Models/Language/UpdateLanguageWebModel.cs
new file mode 100644
index 0000000..128d534
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Language/UpdateLanguageWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Language
+{
+ public class UpdateLanguageWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Post/CreatePostWebModel.cs b/src/Web/DevHive.Web.Models/Post/CreatePostWebModel.cs
new file mode 100644
index 0000000..237259d
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Post/CreatePostWebModel.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Web.Models.Post
+{
+ public class CreatePostWebModel
+ {
+ [NotNull]
+ [Required]
+ public string Message { get; set; }
+
+ public List<IFormFile> Files { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Post/ReadPostWebModel.cs b/src/Web/DevHive.Web.Models/Post/ReadPostWebModel.cs
new file mode 100644
index 0000000..d6ea1f4
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Post/ReadPostWebModel.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using DevHive.Common.Models.Misc;
+
+namespace DevHive.Web.Models.Post
+{
+ public class ReadPostWebModel
+ {
+ public Guid PostId { get; set; }
+
+ public string CreatorFirstName { get; set; }
+
+ public string CreatorLastName { get; set; }
+
+ public string CreatorUsername { get; set; }
+
+ public string Message { get; set; }
+
+ public DateTime TimeCreated { get; set; }
+
+ public List<IdModel> Comments { get; set; }
+
+ public List<string> FileUrls { get; set; }
+
+ public int CurrentRating { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Post/UpdatePostWebModel.cs b/src/Web/DevHive.Web.Models/Post/UpdatePostWebModel.cs
new file mode 100644
index 0000000..a0c9b61
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Post/UpdatePostWebModel.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Web.Models.Post
+{
+ public class UpdatePostWebModel
+ {
+ [Required]
+ [NotNull]
+ public Guid PostId { get; set; }
+
+ [NotNull]
+ [Required]
+ public string NewMessage { get; set; }
+
+ public List<IFormFile> Files { get; set; } = new();
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/ProfilePicture/ProfilePictureWebModel.cs b/src/Web/DevHive.Web.Models/ProfilePicture/ProfilePictureWebModel.cs
new file mode 100644
index 0000000..3fe201c
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/ProfilePicture/ProfilePictureWebModel.cs
@@ -0,0 +1,9 @@
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Web.Models.ProfilePicture
+{
+ public class ProfilePictureWebModel
+ {
+ public IFormFile Picture { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Rating/CreateRatingWebModel.cs b/src/Web/DevHive.Web.Models/Rating/CreateRatingWebModel.cs
new file mode 100644
index 0000000..abbb702
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Rating/CreateRatingWebModel.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace DevHive.Web.Models.Rating
+{
+ public class CreateRatingWebModel
+ {
+ public Guid PostId { get; set; }
+
+ public bool IsLike { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Rating/ReadRatingWebModel.cs b/src/Web/DevHive.Web.Models/Rating/ReadRatingWebModel.cs
new file mode 100644
index 0000000..40f4c6f
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Rating/ReadRatingWebModel.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace DevHive.Web.Models.Rating
+{
+ public class ReadRatingWebModel
+ {
+ public Guid Id { get; set; }
+
+ public Guid PostId { get; set; }
+
+ public Guid UserId { get; set; }
+
+ public bool IsLike { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Rating/UpdateRatingWebModel.cs b/src/Web/DevHive.Web.Models/Rating/UpdateRatingWebModel.cs
new file mode 100644
index 0000000..176c099
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Rating/UpdateRatingWebModel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DevHive.Web.Models.Rating
+{
+ public class UpdateRatingWebModel
+ {
+ public bool IsLike { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Role/CreateRoleWebModel.cs b/src/Web/DevHive.Web.Models/Role/CreateRoleWebModel.cs
new file mode 100644
index 0000000..9beced4
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Role/CreateRoleWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Role
+{
+ public class CreateRoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Role/RoleWebModel.cs b/src/Web/DevHive.Web.Models/Role/RoleWebModel.cs
new file mode 100644
index 0000000..680fb05
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Role/RoleWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Role
+{
+ public class RoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Role/UpdateRoleWebModel.cs b/src/Web/DevHive.Web.Models/Role/UpdateRoleWebModel.cs
new file mode 100644
index 0000000..f32839e
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Role/UpdateRoleWebModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Role
+{
+ public class UpdateRoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Technology/CreateTechnologyWebModel.cs b/src/Web/DevHive.Web.Models/Technology/CreateTechnologyWebModel.cs
new file mode 100644
index 0000000..ec9ec15
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Technology/CreateTechnologyWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Technology
+{
+ public class CreateTechnologyWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Technology/ReadTechnologyWebModel.cs b/src/Web/DevHive.Web.Models/Technology/ReadTechnologyWebModel.cs
new file mode 100644
index 0000000..94542d7
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Technology/ReadTechnologyWebModel.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace DevHive.Web.Models.Technology
+{
+ public class ReadTechnologyWebModel
+ {
+ public Guid Id { get; set; }
+
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Technology/TechnologyWebModel.cs b/src/Web/DevHive.Web.Models/Technology/TechnologyWebModel.cs
new file mode 100644
index 0000000..6e8273b
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Technology/TechnologyWebModel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Technology
+{
+ public class TechnologyWebModel
+ {
+ [NotNull]
+ [Required]
+ public Guid Id { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/Technology/UpdateTechnologyWebModel.cs b/src/Web/DevHive.Web.Models/Technology/UpdateTechnologyWebModel.cs
new file mode 100644
index 0000000..3e9fe2a
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/Technology/UpdateTechnologyWebModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Technology
+{
+ public class UpdateTechnologyWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/BaseUserWebModel.cs b/src/Web/DevHive.Web.Models/User/BaseUserWebModel.cs
new file mode 100644
index 0000000..5fdb757
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/BaseUserWebModel.cs
@@ -0,0 +1,34 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Models.Attributes;
+
+namespace DevHive.Web.Models.User
+{
+ public class BaseUserWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string UserName { get; set; }
+
+ [NotNull]
+ [Required]
+ [EmailAddress]
+ public string Email { get; set; }
+
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(30)]
+ [OnlyLetters(ErrorMessage = "First name can only contain letters!")]
+ public string FirstName { get; set; }
+
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(30)]
+ [OnlyLetters(ErrorMessage = "Last name can only contain letters!")]
+ public string LastName { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/LoginWebModel.cs b/src/Web/DevHive.Web.Models/User/LoginWebModel.cs
new file mode 100644
index 0000000..7d4e93a
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/LoginWebModel.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Models.Attributes;
+
+namespace DevHive.Web.Models.User
+{
+ public class LoginWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string UserName { get; set; }
+
+ [NotNull]
+ [Required]
+ [GoodPassword]
+ public string Password { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/RegisterWebModel.cs b/src/Web/DevHive.Web.Models/User/RegisterWebModel.cs
new file mode 100644
index 0000000..999ff00
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/RegisterWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Models.Attributes;
+
+namespace DevHive.Web.Models.User
+{
+ public class RegisterWebModel : BaseUserWebModel
+ {
+ [NotNull]
+ [Required]
+ [GoodPassword]
+ public string Password { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/TokenWebModel.cs b/src/Web/DevHive.Web.Models/User/TokenWebModel.cs
new file mode 100644
index 0000000..7f3361d
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/TokenWebModel.cs
@@ -0,0 +1,12 @@
+namespace DevHive.Web.Models.User
+{
+ public class TokenWebModel
+ {
+ public TokenWebModel(string token)
+ {
+ this.Token = token;
+ }
+
+ public string Token { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/UpdateUserWebModel.cs b/src/Web/DevHive.Web.Models/User/UpdateUserWebModel.cs
new file mode 100644
index 0000000..f74927e
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/UpdateUserWebModel.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Models.Attributes;
+using DevHive.Web.Models.Role;
+using DevHive.Web.Models.Language;
+using DevHive.Web.Models.Technology;
+
+namespace DevHive.Web.Models.User
+{
+ public class UpdateUserWebModel : BaseUserWebModel
+ {
+ [NotNull]
+ [Required]
+ [GoodPassword]
+ public string Password { get; set; }
+
+ [NotNull]
+ [Required]
+ public HashSet<UsernameWebModel> Friends { get; set; }
+
+ [NotNull]
+ [Required]
+ public HashSet<UpdateRoleWebModel> Roles { get; set; }
+
+ [NotNull]
+ [Required]
+ public HashSet<UpdateLanguageWebModel> Languages { get; set; }
+
+ [NotNull]
+ [Required]
+ public HashSet<UpdateTechnologyWebModel> Technologies { get; set; }
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/UserWebModel.cs b/src/Web/DevHive.Web.Models/User/UserWebModel.cs
new file mode 100644
index 0000000..37141d0
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/UserWebModel.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Common.Models.Misc;
+using DevHive.Web.Models.Role;
+using DevHive.Web.Models.Language;
+using DevHive.Web.Models.Technology;
+
+namespace DevHive.Web.Models.User
+{
+ public class UserWebModel : BaseUserWebModel
+ {
+ public string ProfilePictureURL { get; set; }
+
+ [NotNull]
+ [Required]
+ public HashSet<RoleWebModel> Roles { get; set; } = new();
+
+ [NotNull]
+ [Required]
+ public HashSet<UsernameWebModel> Friends { get; set; } = new();
+
+ [NotNull]
+ [Required]
+ public HashSet<LanguageWebModel> Languages { get; set; } = new();
+
+ [NotNull]
+ [Required]
+ public HashSet<TechnologyWebModel> Technologies { get; set; } = new();
+
+ public List<IdModel> Posts { get; set; } = new();
+ }
+}
diff --git a/src/Web/DevHive.Web.Models/User/UsernameWebModel.cs b/src/Web/DevHive.Web.Models/User/UsernameWebModel.cs
new file mode 100644
index 0000000..638cb15
--- /dev/null
+++ b/src/Web/DevHive.Web.Models/User/UsernameWebModel.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Models.Attributes;
+
+namespace DevHive.Web.Models.User
+{
+ public class UsernameWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string UserName { get; set; }
+ }
+}