aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Web/Models
diff options
context:
space:
mode:
authorVictor S <57849063+transtrike@users.noreply.github.com>2021-02-05 10:54:49 -0800
committerGitHub <noreply@github.com>2021-02-05 10:54:49 -0800
commitf4a70c6430db923af9fa9958a11c2d6612cb52cc (patch)
treeca0ea403ba5500df20bc8854ec50529a25c64245 /src/DevHive.Web/Models
parent1ccdefdac025b1b986ad2bd0bc3eda7505d6e7c3 (diff)
parent2269b5aa6c8d3dcb407c34fa256200bdc573585a (diff)
downloadDevHive-f4a70c6430db923af9fa9958a11c2d6612cb52cc.tar
DevHive-f4a70c6430db923af9fa9958a11c2d6612cb52cc.tar.gz
DevHive-f4a70c6430db923af9fa9958a11c2d6612cb52cc.zip
Merge pull request #18 from Team-Kaleidoscope/devv0.1
First stage: Complete. Awaiting further progress...
Diffstat (limited to 'src/DevHive.Web/Models')
-rw-r--r--src/DevHive.Web/Models/Comment/CreateCommentWebModel.cs17
-rw-r--r--src/DevHive.Web/Models/Comment/ReadCommentWebModel.cs21
-rw-r--r--src/DevHive.Web/Models/Comment/UpdateCommentWebModel.cs13
-rw-r--r--src/DevHive.Web/Models/Feed/GetPageWebModel.cs19
-rw-r--r--src/DevHive.Web/Models/Feed/ReadPageWebModel.cs10
-rw-r--r--src/DevHive.Web/Models/Identity/Role/CreateRoleWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Identity/Role/RoleWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs15
-rw-r--r--src/DevHive.Web/Models/Identity/User/BaseUserWebModel.cs34
-rw-r--r--src/DevHive.Web/Models/Identity/User/LoginWebModel.cs20
-rw-r--r--src/DevHive.Web/Models/Identity/User/ProfilePictureWebModel.cs7
-rw-r--r--src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Identity/User/TokenWebModel.cs12
-rw-r--r--src/DevHive.Web/Models/Identity/User/UpdateProfilePictureWebModel.cs9
-rw-r--r--src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs34
-rw-r--r--src/DevHive.Web/Models/Identity/User/UserWebModel.cs33
-rw-r--r--src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs15
-rw-r--r--src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Language/LanguageWebModel.cs13
-rw-r--r--src/DevHive.Web/Models/Language/ReadLanguageWebModel.cs11
-rw-r--r--src/DevHive.Web/Models/Language/UpdateLanguageWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Post/CreatePostWebModel.cs16
-rw-r--r--src/DevHive.Web/Models/Post/Rating/RatePostWebModel.cs11
-rw-r--r--src/DevHive.Web/Models/Post/Rating/ReadPostRatingWebModel.cs15
-rw-r--r--src/DevHive.Web/Models/Post/ReadPostWebModel.cs26
-rw-r--r--src/DevHive.Web/Models/Post/UpdatePostWebModel.cs21
-rw-r--r--src/DevHive.Web/Models/Technology/CreateTechnologyWebModel.cs14
-rw-r--r--src/DevHive.Web/Models/Technology/ReadTechnologyWebModel.cs11
-rw-r--r--src/DevHive.Web/Models/Technology/TechnologyWebModel.cs13
-rw-r--r--src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs15
30 files changed, 495 insertions, 0 deletions
diff --git a/src/DevHive.Web/Models/Comment/CreateCommentWebModel.cs b/src/DevHive.Web/Models/Comment/CreateCommentWebModel.cs
new file mode 100644
index 0000000..8b2bf8d
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Comment/ReadCommentWebModel.cs b/src/DevHive.Web/Models/Comment/ReadCommentWebModel.cs
new file mode 100644
index 0000000..4d3aff7
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Comment/UpdateCommentWebModel.cs b/src/DevHive.Web/Models/Comment/UpdateCommentWebModel.cs
new file mode 100644
index 0000000..b5d7970
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Feed/GetPageWebModel.cs b/src/DevHive.Web/Models/Feed/GetPageWebModel.cs
new file mode 100644
index 0000000..4ea44cc
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Feed/ReadPageWebModel.cs b/src/DevHive.Web/Models/Feed/ReadPageWebModel.cs
new file mode 100644
index 0000000..f429313
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Identity/Role/CreateRoleWebModel.cs b/src/DevHive.Web/Models/Identity/Role/CreateRoleWebModel.cs
new file mode 100644
index 0000000..859cdd9
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/Role/CreateRoleWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Identity.Role
+{
+ public class CreateRoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/Role/RoleWebModel.cs b/src/DevHive.Web/Models/Identity/Role/RoleWebModel.cs
new file mode 100644
index 0000000..99b0f50
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/Role/RoleWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Identity.Role
+{
+ public class RoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs b/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs
new file mode 100644
index 0000000..3870481
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+
+namespace DevHive.Web.Models.Identity.Role
+{
+ public class UpdateRoleWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string Name { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/User/BaseUserWebModel.cs b/src/DevHive.Web/Models/Identity/User/BaseUserWebModel.cs
new file mode 100644
index 0000000..297e1a5
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/BaseUserWebModel.cs
@@ -0,0 +1,34 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Attributes;
+
+namespace DevHive.Web.Models.Identity.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/DevHive.Web/Models/Identity/User/LoginWebModel.cs b/src/DevHive.Web/Models/Identity/User/LoginWebModel.cs
new file mode 100644
index 0000000..ccd806f
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/LoginWebModel.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Attributes;
+
+namespace DevHive.Web.Models.Identity.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/DevHive.Web/Models/Identity/User/ProfilePictureWebModel.cs b/src/DevHive.Web/Models/Identity/User/ProfilePictureWebModel.cs
new file mode 100644
index 0000000..9fb1516
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/ProfilePictureWebModel.cs
@@ -0,0 +1,7 @@
+namespace DevHive.Web.Models.Identity.User
+{
+ public class ProfilePictureWebModel
+ {
+ public string ProfilePictureURL { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs b/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs
new file mode 100644
index 0000000..0fc7ec6
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/RegisterWebModel.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Attributes;
+
+namespace DevHive.Web.Models.Identity.User
+{
+ public class RegisterWebModel : BaseUserWebModel
+ {
+ [NotNull]
+ [Required]
+ [GoodPassword]
+ public string Password { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/User/TokenWebModel.cs b/src/DevHive.Web/Models/Identity/User/TokenWebModel.cs
new file mode 100644
index 0000000..154b64b
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/TokenWebModel.cs
@@ -0,0 +1,12 @@
+namespace DevHive.Web.Models.Identity.User
+{
+ public class TokenWebModel
+ {
+ public TokenWebModel(string token)
+ {
+ this.Token = token;
+ }
+
+ public string Token { get; set; }
+ }
+} \ No newline at end of file
diff --git a/src/DevHive.Web/Models/Identity/User/UpdateProfilePictureWebModel.cs b/src/DevHive.Web/Models/Identity/User/UpdateProfilePictureWebModel.cs
new file mode 100644
index 0000000..6efe968
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/UpdateProfilePictureWebModel.cs
@@ -0,0 +1,9 @@
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Web.Models.Identity.User
+{
+ public class UpdateProfilePictureWebModel
+ {
+ public IFormFile Picture { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs b/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs
new file mode 100644
index 0000000..62901f6
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Attributes;
+using DevHive.Web.Models.Identity.Role;
+using DevHive.Web.Models.Language;
+using DevHive.Web.Models.Technology;
+
+namespace DevHive.Web.Models.Identity.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/DevHive.Web/Models/Identity/User/UserWebModel.cs b/src/DevHive.Web/Models/Identity/User/UserWebModel.cs
new file mode 100644
index 0000000..7ab8cca
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/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.Identity.Role;
+using DevHive.Web.Models.Language;
+using DevHive.Web.Models.Technology;
+
+namespace DevHive.Web.Models.Identity.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/DevHive.Web/Models/Identity/User/UsernameWebModel.cs b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs
new file mode 100644
index 0000000..c533bba
--- /dev/null
+++ b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics.CodeAnalysis;
+using DevHive.Web.Attributes;
+
+namespace DevHive.Web.Models.Identity.User
+{
+ public class UsernameWebModel
+ {
+ [NotNull]
+ [Required]
+ [MinLength(3)]
+ [MaxLength(50)]
+ public string UserName { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs b/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs
new file mode 100644
index 0000000..a739e7f
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Language/LanguageWebModel.cs b/src/DevHive.Web/Models/Language/LanguageWebModel.cs
new file mode 100644
index 0000000..7515e70
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Language/ReadLanguageWebModel.cs b/src/DevHive.Web/Models/Language/ReadLanguageWebModel.cs
new file mode 100644
index 0000000..3d9d5b6
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Language/UpdateLanguageWebModel.cs b/src/DevHive.Web/Models/Language/UpdateLanguageWebModel.cs
new file mode 100644
index 0000000..128d534
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Post/CreatePostWebModel.cs b/src/DevHive.Web/Models/Post/CreatePostWebModel.cs
new file mode 100644
index 0000000..237259d
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Post/Rating/RatePostWebModel.cs b/src/DevHive.Web/Models/Post/Rating/RatePostWebModel.cs
new file mode 100644
index 0000000..5f0e58f
--- /dev/null
+++ b/src/DevHive.Web/Models/Post/Rating/RatePostWebModel.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace DevHive.Web.Models.Post.Rating
+{
+ public class RatePostWebModel
+ {
+ public Guid PostId { get; set; }
+
+ public bool Liked { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Post/Rating/ReadPostRatingWebModel.cs b/src/DevHive.Web/Models/Post/Rating/ReadPostRatingWebModel.cs
new file mode 100644
index 0000000..a551fb8
--- /dev/null
+++ b/src/DevHive.Web/Models/Post/Rating/ReadPostRatingWebModel.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace DevHive.Web.Models.Post.Rating
+{
+ public class ReadPostRatingWebModel
+ {
+ public Guid Id { get; set; }
+
+ public Guid PostId { get; set; }
+
+ public int Likes { get; set; }
+
+ public int Dislikes { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Post/ReadPostWebModel.cs b/src/DevHive.Web/Models/Post/ReadPostWebModel.cs
new file mode 100644
index 0000000..8238f47
--- /dev/null
+++ b/src/DevHive.Web/Models/Post/ReadPostWebModel.cs
@@ -0,0 +1,26 @@
+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 List<FileContentResult> Files { get; set; }
+ }
+}
diff --git a/src/DevHive.Web/Models/Post/UpdatePostWebModel.cs b/src/DevHive.Web/Models/Post/UpdatePostWebModel.cs
new file mode 100644
index 0000000..a0c9b61
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Technology/CreateTechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/CreateTechnologyWebModel.cs
new file mode 100644
index 0000000..ec9ec15
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Technology/ReadTechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/ReadTechnologyWebModel.cs
new file mode 100644
index 0000000..94542d7
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Technology/TechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/TechnologyWebModel.cs
new file mode 100644
index 0000000..6e8273b
--- /dev/null
+++ b/src/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/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs
new file mode 100644
index 0000000..3e9fe2a
--- /dev/null
+++ b/src/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; }
+ }
+}