From 6eb1190e4f49a3c6013c1ccd9e039b8771676f4f Mon Sep 17 00:00:00 2001 From: KAJOiq Date: Fri, 15 Nov 2024 00:14:48 +0300 Subject: [PATCH 01/16] Cr1 & Cr2 & Cr3 & Cr4 All done --- Contexts/MainAppContext.cs | 17 +- Controllers/Mobile/v1/AuthController.cs | 214 ++++++--- Controllers/Mobile/v1/ProjectsController.cs | 151 +++++- Controllers/Mobile/v1/UsersController.cs | 7 +- .../20241101210734_InitialMig.Designer.cs | 373 --------------- Migrations/20241104104334_otp-mig.Designer.cs | 396 ---------------- Migrations/20241104104334_otp-mig.cs | 37 -- ...41104112027_otp-mig-with-check.Designer.cs | 399 ---------------- .../20241104112027_otp-mig-with-check.cs | 27 -- ...ue-phoneNumber-aspnetusers-mig.Designer.cs | 402 ---------------- ...4504_unique-phoneNumber-aspnetusers-mig.cs | 28 -- ...otp_phonenumber_foreignkey_mig.Designer.cs | 413 ---------------- ...718_Make_otp_phonenumber_foreignkey_mig.cs | 57 --- ...1703_add-createdAt-in-projects.Designer.cs | 416 ---------------- ...0241105131703_add-createdAt-in-projects.cs | 30 -- ...109125128_ProjectModifications.Designer.cs | 443 ------------------ .../20241109125128_ProjectModifications.cs | 94 ---- .../20241109131530_ProjectModifications2.cs | 22 - ...0241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs} | 68 ++- ...g.cs => 20241114201856_Cr1Cr2Cr3Cr4Mig.cs} | 94 +++- Migrations/MainAppContextModelSnapshot.cs | 64 ++- Models/ApiResponse.cs | 2 + Models/Client.cs | 2 +- Models/DTOs/ClientDTO.cs | 6 +- Models/DTOs/FreelancerDTO.cs | 8 +- Models/DTOs/ProjectInputDTO.cs | 23 +- Models/DTOs/ProjectOutDTO.cs | 12 +- Models/DTOs/UserDTO.cs | 3 +- Models/OTP.cs | 8 +- Models/Project.cs | 15 +- ...isterRequest.cs => RegisterInfoRequest.cs} | 13 +- Models/Requests/RegisterPhoneRequest.cs | 10 + Models/Requests/VerifyReq.cs | 8 +- Models/TempOTP.cs | 17 + Models/User.cs | 2 + Models/UsersTemp.cs | 19 + Program.cs | 33 +- aon.db | Bin 143360 -> 147456 bytes aon.db-shm | Bin 32768 -> 32768 bytes aon.db-wal | Bin 0 -> 341992 bytes 40 files changed, 651 insertions(+), 3282 deletions(-) delete mode 100644 Migrations/20241101210734_InitialMig.Designer.cs delete mode 100644 Migrations/20241104104334_otp-mig.Designer.cs delete mode 100644 Migrations/20241104104334_otp-mig.cs delete mode 100644 Migrations/20241104112027_otp-mig-with-check.Designer.cs delete mode 100644 Migrations/20241104112027_otp-mig-with-check.cs delete mode 100644 Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.Designer.cs delete mode 100644 Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.cs delete mode 100644 Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.Designer.cs delete mode 100644 Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.cs delete mode 100644 Migrations/20241105131703_add-createdAt-in-projects.Designer.cs delete mode 100644 Migrations/20241105131703_add-createdAt-in-projects.cs delete mode 100644 Migrations/20241109125128_ProjectModifications.Designer.cs delete mode 100644 Migrations/20241109125128_ProjectModifications.cs delete mode 100644 Migrations/20241109131530_ProjectModifications2.cs rename Migrations/{20241109131530_ProjectModifications2.Designer.cs => 20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs} (88%) rename Migrations/{20241101210734_InitialMig.cs => 20241114201856_Cr1Cr2Cr3Cr4Mig.cs} (76%) rename Models/Requests/{RegisterRequest.cs => RegisterInfoRequest.cs} (80%) create mode 100644 Models/Requests/RegisterPhoneRequest.cs create mode 100644 Models/TempOTP.cs create mode 100644 Models/UsersTemp.cs diff --git a/Contexts/MainAppContext.cs b/Contexts/MainAppContext.cs index 348a4a6..27f5eac 100644 --- a/Contexts/MainAppContext.cs +++ b/Contexts/MainAppContext.cs @@ -5,7 +5,7 @@ namespace AonFreelancing.Contexts { - public class MainAppContext:IdentityDbContext + public class MainAppContext : IdentityDbContext { // For TPT design, no need to define each one //public DbSet Freelancers { get; set; } @@ -15,20 +15,27 @@ public class MainAppContext:IdentityDbContext // instead, use User only public DbSet Users { get; set; } // Will access Freelancers, Clients, SystemUsers through inheritance and ofType public DbSet OTPs { get; set; } - public MainAppContext(DbContextOptions contextOptions) : base(contextOptions) { + + public DbSet UsersTemps { get; set; } + public DbSet TempOTPs { get; set; } + //Add temp table for PhoneNumber verfiy + + public MainAppContext(DbContextOptions contextOptions) : base(contextOptions) + { } protected override void OnModelCreating(ModelBuilder builder) { - + // For TPT design builder.Entity().ToTable("AspNetUsers") - .HasIndex(u=>u.PhoneNumber).IsUnique(); + .HasIndex(u => u.PhoneNumber).IsUnique(); builder.Entity().ToTable("Freelancers"); builder.Entity().ToTable("Clients"); builder.Entity().ToTable("SystemUsers"); - builder.Entity().ToTable("otps", o => o.HasCheckConstraint("CK_CODE","length([Code]) = 6")); + builder.Entity().ToTable("otps", o => o.HasCheckConstraint("CK_CODE", "length([Code]) = 6")); + builder.Entity().ToTable("UsersTemps"); //set up relationships builder.Entity().HasOne() diff --git a/Controllers/Mobile/v1/AuthController.cs b/Controllers/Mobile/v1/AuthController.cs index dc6ead2..0c670e8 100644 --- a/Controllers/Mobile/v1/AuthController.cs +++ b/Controllers/Mobile/v1/AuthController.cs @@ -13,10 +13,13 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; +using System.Linq; using Twilio; using Twilio.Rest.Api.V2010.Account; using Twilio.TwiML.Messaging; using Twilio.Types; +using static System.Runtime.InteropServices.JavaScript.JSType; +using Error = AonFreelancing.Models.Error; namespace AonFreelancing.Controllers.Mobile.v1 { @@ -46,78 +49,171 @@ JwtService jwtService _otpManager = otpManager; _jwtService = jwtService; } + [HttpPut("register/resend")] + public async Task ResendOtpAsync(RegisterPhoneRequest registerPhoneRequest) + { + string otpCode = _otpManager.GenerateOtp(); + + TempOTP checkOtp = await _mainAppContext.TempOTPs + .Where(o => o.PhoneNumber == registerPhoneRequest.PhoneNumber) + .FirstOrDefaultAsync(); + + if (checkOtp == null) + { + return NotFound(new { Message = "No OTP entry found for the specified phone number." }); + } + + checkOtp.Code = otpCode; + checkOtp.CreatedDate = DateTime.Now; + checkOtp.ExpiresAt = DateTime.Now.AddMinutes(1); + + _mainAppContext.TempOTPs.Update(checkOtp); + await _mainAppContext.SaveChangesAsync(); + + await _otpManager.SendOTPAsync(checkOtp.Code, checkOtp.PhoneNumber); + + return Ok(new { Message = "OTP resent successfully", OTP = otpCode }); + } + + [HttpPost("register/phonenumber")] + public async Task RegisterPhoneNumberAsync([FromBody] RegisterPhoneRequest registerPhoneRequest) + { + + if (await _userManager.Users.Where(u => u.PhoneNumber == registerPhoneRequest.PhoneNumber).FirstOrDefaultAsync() != null) + return BadRequest(CreateErrorResponse(StatusCodes.Status400BadRequest.ToString(), "Phone number is already used by an account")); + + if (await _mainAppContext.UsersTemps.Where(u => u.PhoneNumber == registerPhoneRequest.PhoneNumber && u.IsVerfied == false).FirstOrDefaultAsync() != null) + { + if (await _mainAppContext.TempOTPs.Where(u => u.ExpiresAt.HasValue && u.ExpiresAt < DateTime.Now).FirstOrDefaultAsync() != null) + { + return Conflict(new ApiResponse + { + IsSuccess = false, + Results = registerPhoneRequest.PhoneNumber, + Message = "OTP already sent. Check your messages and verify your account." + }); + } + else + { + await ResendOtpAsync(registerPhoneRequest); + } + } + + if (await _mainAppContext.UsersTemps.Where(u => u.PhoneNumber == registerPhoneRequest.PhoneNumber && u.IsVerfied == true).FirstOrDefaultAsync() != null) + return Conflict(new ApiResponse + { + IsSuccess = false, + Results = registerPhoneRequest.PhoneNumber, + Message = "Phone number is verified. Complete your registration." + }); + + UsersTemp usersTemp = new UsersTemp + { + PhoneNumber = registerPhoneRequest.PhoneNumber + }; + + string otpCode = _otpManager.GenerateOtp(); + + TempOTP tempOTP = new TempOTP() + { + Code = otpCode, + PhoneNumber = registerPhoneRequest.PhoneNumber, + CreatedDate = DateTime.Now, + ExpiresAt = DateTime.Now.AddMinutes(1), + }; + + await _mainAppContext.TempOTPs.AddAsync(tempOTP); + await _mainAppContext.UsersTemps.AddAsync(usersTemp); + await _mainAppContext.SaveChangesAsync(); + + await _otpManager.SendOTPAsync(tempOTP.Code, tempOTP.PhoneNumber); + + return Ok(new ApiResponse + { + IsSuccess = true, + Results = registerPhoneRequest.PhoneNumber, + Errors = null, + }); - [HttpPost("register")] - public async Task RegisterAsync([FromBody] RegRequest regRequest) + + } + + [HttpPost("register/userInfo")] + public async Task RegisterUserInfoAsync([FromBody] RegisterInfoRequest registerInfoRequest) { User user = new User(); - if (regRequest.UserType == Constants.USER_TYPE_FREELANCER) + if (registerInfoRequest.UserType == Constants.USER_TYPE_FREELANCER) { // Register User user = new Freelancer { - Name = regRequest.Name, - UserName = regRequest.Username, - PhoneNumber = regRequest.PhoneNumber, - Skills = regRequest.Skills + Name = registerInfoRequest.Name, + UserName = registerInfoRequest.Username, + Email = registerInfoRequest.Email, + PhoneNumber = registerInfoRequest.PhoneNumber, + Skills = registerInfoRequest.Skills, + PhoneNumberConfirmed = true, + About = registerInfoRequest.About + }; } - else if (regRequest.UserType == Constants.USER_TYPE_CLIENT) + else if (registerInfoRequest.UserType == Constants.USER_TYPE_CLIENT) { user = new Models.Client { - Name = regRequest.Name, - UserName = regRequest.Username, - PhoneNumber = regRequest.PhoneNumber, - CompanyName = regRequest.CompanyName + Name = registerInfoRequest.Name, + UserName = registerInfoRequest.Username, + Email = registerInfoRequest.Email, + PhoneNumber = registerInfoRequest.PhoneNumber, + CompanyName = registerInfoRequest.CompanyName, + PhoneNumberConfirmed = true, + About = registerInfoRequest.About + }; } - //check if username or phoneNumber is taken - if (await _userManager.Users.Where(u => u.UserName == regRequest.Username || u.PhoneNumber == regRequest.PhoneNumber).FirstOrDefaultAsync() != null) - return BadRequest(CreateErrorResponse(StatusCodes.Status400BadRequest.ToString(), "username or phone number is already used by an account")); - - //create new User with hashed passworrd in the database - var userCreationResult = await _userManager.CreateAsync(user, regRequest.Password); + await _userManager.IsPhoneNumberConfirmedAsync(user); + if (await _userManager.Users.Where(u => u.UserName == registerInfoRequest.Username && u.Email == registerInfoRequest.Email).FirstOrDefaultAsync() != null) + return BadRequest(CreateErrorResponse(StatusCodes.Status400BadRequest.ToString(), "username or email is already used by an account")); + + var userCreationResult = await _userManager.CreateAsync(user, registerInfoRequest.Password); if (!userCreationResult.Succeeded) return StatusCode(StatusCodes.Status500InternalServerError, new ApiResponse() { - Errors = userCreationResult.Errors - .Select(e => new Error() + Errors = userCreationResult.Errors.Select(e => new Error() { Code = e.Code, Message = e.Description }) .ToList() }); - - // To be fixed - //assign a role to the newly created User - //var role = new ApplicationRole { Name = regRequest.UserType }; - //await _roleManager.CreateAsync(role); - var role = await _roleManager.FindByNameAsync(regRequest.UserType); - await _userManager.AddToRoleAsync(user, role.Name); - - string otpCode = _otpManager.GenerateOtp(); - //persist the otp to the otps table - OTP otp = new OTP() + TempOTP setOTP = await _mainAppContext.TempOTPs.Where(x => x.PhoneNumber == registerInfoRequest.PhoneNumber).FirstOrDefaultAsync(); + OTP oTP = new OTP { - Code = otpCode, - PhoneNumber = regRequest.PhoneNumber, - CreatedDate = DateTime.Now, - ExpiresAt = DateTime.Now.AddMinutes(1), + PhoneNumber = setOTP.PhoneNumber, + Code = setOTP.Code, + CreatedDate = setOTP.CreatedDate, + IsUsed = setOTP.IsUsed, + ExpiresAt = setOTP.ExpiresAt + }; - await _mainAppContext.OTPs.AddAsync(otp); + await _mainAppContext.OTPs.AddAsync(oTP); + _mainAppContext.TempOTPs.Remove(setOTP); await _mainAppContext.SaveChangesAsync(); + + var role = new ApplicationRole { Name = registerInfoRequest.UserType }; + await _roleManager.CreateAsync(role); + await _userManager.AddToRoleAsync(user, role.Name); + - //send the otp to the specified phone number - await _otpManager.SendOTPAsync(otp.Code, otp.PhoneNumber); + var tempuser = await _mainAppContext.UsersTemps.Where(t => t.PhoneNumber == registerInfoRequest.PhoneNumber).FirstOrDefaultAsync(); + _mainAppContext.Remove(tempuser); + await _mainAppContext.SaveChangesAsync(); - // Get created User (if it is a freelancer) - if (regRequest.UserType == Constants.USER_TYPE_FREELANCER) + if (registerInfoRequest.UserType == Constants.USER_TYPE_FREELANCER) { var createdUser = await _mainAppContext.Users.OfType() - .Where(u => u.UserName == regRequest.Username) + .Where(u => u.UserName == registerInfoRequest.Username) .Select(u => new FreelancerResponseDTO() { Id = u.Id, @@ -126,16 +222,17 @@ public async Task RegisterAsync([FromBody] RegRequest regRequest) PhoneNumber = u.PhoneNumber, Skills = u.Skills, UserType = Constants.USER_TYPE_FREELANCER, + IsPhoneNumberVerified = u.PhoneNumberConfirmed, + About = u.About, Role = new RoleResponseDTO { Id = role.Id, Name = role.Name } }) .FirstOrDefaultAsync(); return Ok(CreateSuccessResponse(createdUser)); } - // Get created User (if it is a client) - else if (regRequest.UserType == Constants.USER_TYPE_CLIENT) + else if (registerInfoRequest.UserType == Constants.USER_TYPE_CLIENT) { var createdUser = await _mainAppContext.Users.OfType() - .Where(c => c.UserName == regRequest.Username) + .Where(c => c.UserName == registerInfoRequest.Username) .Select(c => new ClientResponseDTO { Id = c.Id, @@ -144,12 +241,14 @@ public async Task RegisterAsync([FromBody] RegRequest regRequest) PhoneNumber = c.PhoneNumber, CompanyName = c.CompanyName, UserType = Constants.USER_TYPE_CLIENT, + IsPhoneNumberVerified = c.PhoneNumberConfirmed, + About = c.About, Role = new RoleResponseDTO { Id = role.Id, Name = role.Name } }) .FirstOrDefaultAsync(); return Ok(CreateSuccessResponse(createdUser)); } - //this fallback return value will not be returned due to model validation. + return Ok(); } @@ -163,6 +262,12 @@ public async Task LoginAsync([FromBody] AuthRequest Req) return Unauthorized(CreateErrorResponse(StatusCodes.Status401Unauthorized.ToString(), "Verify Your Account First")); var role = (await _userManager.GetRolesAsync(user)).FirstOrDefault(); + + if (role == null) + { + return Unauthorized(CreateErrorResponse(StatusCodes.Status401Unauthorized.ToString(), "User role is missing")); + } + var token = _jwtService.GenerateJWT(user, role); return Ok(CreateSuccessResponse(new LoginResponse() { @@ -177,19 +282,18 @@ public async Task LoginAsync([FromBody] AuthRequest Req) [HttpPost("verify")] public async Task VerifyAsync([FromBody] VerifyReq verifyReq) { - var user = await _userManager.Users.Where(x => x.PhoneNumber == verifyReq.Phone).FirstOrDefaultAsync(); - if (user != null && !await _userManager.IsPhoneNumberConfirmedAsync(user)) + var usertemp = await _mainAppContext.UsersTemps.Where(x => x.PhoneNumber == verifyReq.Phone).FirstOrDefaultAsync(); + if (usertemp != null) { - OTP? otp = await _mainAppContext.OTPs.Where(o => o.PhoneNumber == verifyReq.Phone).FirstOrDefaultAsync(); + TempOTP? tempOTP = await _mainAppContext.TempOTPs.Where(o => o.PhoneNumber == verifyReq.Phone).FirstOrDefaultAsync(); - // verify OTP - if (otp != null && verifyReq.Otp.Equals(otp.Code) && DateTime.Now < otp.ExpiresAt) + if (tempOTP != null && verifyReq.Otp.Equals(tempOTP.Code) && DateTime.Now < tempOTP.ExpiresAt) { - user.PhoneNumberConfirmed = true; - await _userManager.UpdateAsync(user); + usertemp.IsVerfied = true; + _mainAppContext.UsersTemps.Update(usertemp); - // disable sent OTP - otp.IsUsed = true; + tempOTP.IsUsed = true; + _mainAppContext.Update(tempOTP); await _mainAppContext.SaveChangesAsync(); return Ok(CreateSuccessResponse("Activated")); @@ -224,4 +328,4 @@ public async Task VerifyAsync([FromBody] VerifyReq verifyReq) // return Ok(CreateSuccessResponse("Your password have been reset")); //} } -} +} \ No newline at end of file diff --git a/Controllers/Mobile/v1/ProjectsController.cs b/Controllers/Mobile/v1/ProjectsController.cs index 4cdf952..d0dab90 100644 --- a/Controllers/Mobile/v1/ProjectsController.cs +++ b/Controllers/Mobile/v1/ProjectsController.cs @@ -1,12 +1,13 @@ using AonFreelancing.Contexts; using AonFreelancing.Models; using AonFreelancing.Models.DTOs; +using AonFreelancing.Utilities; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using System.Security.Claims; +using System.IO; namespace AonFreelancing.Controllers.Mobile.v1 { @@ -26,27 +27,68 @@ UserManager userManager _userManager = userManager; } - - [Authorize] - [HttpPost] + [HttpPost("add")] public async Task CreateProject([FromBody] ProjectInputDTO project) { - var Username = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; - var UserClient = await _userManager.FindByNameAsync(Username); - - Project p = new Project(); - p.Title = project.Title; - p.Description = project.Description; - p.ClientId = UserClient.Id; - p.QualificationName = project.QualificationName; - p.Budget = project.Budget; - p.PriceType = project.PriceType; - p.Duration = project.Duration; - - _mainAppContext.Projects.Add(p); - _mainAppContext.SaveChanges(); - return Ok(CreateSuccessResponse(p)); + if (!ModelState.IsValid) + { + return BadRequest(new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "400", Message = "Invalid project data." } }, + Message = "Validation failed" + }); + } + + try + { + Project p = new Project + { + Title = project.Title, + Description = project.Description, + ClientId = project.ClientId, + PriceType = project.PriceType, + Duration = project.Duration, + QualificationName = project.QualificationName, + Budget = project.Budget, + Status = "Available" + }; + + await _mainAppContext.Projects.AddAsync(p); + await _mainAppContext.SaveChangesAsync(); + + var projectOutDTO = new ProjectOutDTO + { + Title = p.Title, + Description = p.Description, + CreatedAt = DateTime.UtcNow, + Status = p.Status, + Budget = p.Budget, + Duration = p.Duration, + PriceType = p.PriceType, + QualificationName = p.QualificationName + }; + + return Ok(new ApiResponse + { + IsSuccess = true, + Results = projectOutDTO, + Errors = null, + Message = "Project created successfully." + }); + } + catch (Exception ex) + { + return StatusCode(500, new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "500", Message = ex.Message } }, + Message = "An error occurred while creating the project." + }); + } } @@ -61,6 +103,77 @@ public async Task CreateProject([FromBody] ProjectInputDTO projec //} + [Authorize] + [HttpGet("feed")] + public async Task GetProjectsFeed( + int pageSize = 10, + int pageNumber = 1, + string search_query = "", + string qual = "") + { + var query = _mainAppContext.Projects.AsQueryable(); + + query = query.Where(p => p.Status == "Available"); + + if (!string.IsNullOrEmpty(search_query)) + { + query = query.Where(p => p.Title.Contains(search_query) || p.Description.Contains(search_query)); + } + + if (!string.IsNullOrEmpty(qual)) + { + var qualifications = qual.Split(','); + query = query.Where(p => qualifications.Contains(p.QualificationName)); + } + + var totalProjects = await query.CountAsync(); + + var projects = await query + .Skip((pageNumber - 1) * pageSize) + .Take(pageSize) + .ToListAsync(); + + var projectDtos = projects.Select(p => new ProjectOutDTO + { + Title = p.Title, + Description = p.Description, + Status = p.Status, + Budget = p.Budget, + Duration = p.Duration, + QualificationName = p.QualificationName, + CreatedAt = DateTime.UtcNow, + CreationTimeAgo = GetTimeAgo(p.CreatedAt) + }).ToList(); + + var response = new ApiResponse> + { + IsSuccess = true, + Results = projectDtos, + Message = "Projects feed loaded successfully", + Errors = null + }; + + Response.Headers.Add("X-Total-Count", totalProjects.ToString()); + Response.Headers.Add("X-Total-Pages", Math.Ceiling(totalProjects / (double)pageSize).ToString()); + + return Ok(response); + } + + private string GetTimeAgo(DateTime createdAt) + { + var timeSpan = DateTime.UtcNow - createdAt; + if (timeSpan.TotalMinutes < 1) + return "just now"; + if (timeSpan.TotalMinutes < 60) + return $"{(int)timeSpan.TotalMinutes} minute(s) ago"; + if (timeSpan.TotalHours < 24) + return $"{(int)timeSpan.TotalHours} hour(s) ago"; + if (timeSpan.TotalDays < 30) + return $"{(int)timeSpan.TotalDays} day(s) ago"; + if (timeSpan.TotalDays < 365) + return $"{(int)(timeSpan.TotalDays / 30)} month(s) ago"; + return $"{(int)(timeSpan.TotalDays / 365)} year(s) ago"; + } } } diff --git a/Controllers/Mobile/v1/UsersController.cs b/Controllers/Mobile/v1/UsersController.cs index 9fd7645..bf43f78 100644 --- a/Controllers/Mobile/v1/UsersController.cs +++ b/Controllers/Mobile/v1/UsersController.cs @@ -25,6 +25,7 @@ public UsersController(MainAppContext mainAppContext, RoleManager GetProfileById([FromRoute] long id) { @@ -38,7 +39,8 @@ public async Task GetProfileById([FromRoute] long id) PhoneNumber = f.PhoneNumber, UserType = Constants.USER_TYPE_FREELANCER, IsPhoneNumberVerified = f.PhoneNumberConfirmed, - Role = new RoleResponseDTO { Name = Constants.USER_TYPE_FREELANCER }, + Role = new RoleResponseDTO { Id = f.Id, Name = Constants.USER_TYPE_FREELANCER }, + About = f.About, Skills = f.Skills, }).FirstOrDefaultAsync(); if (freelancerResponseDTO != null) @@ -56,7 +58,8 @@ public async Task GetProfileById([FromRoute] long id) PhoneNumber = c.PhoneNumber, UserType = Constants.USER_TYPE_CLIENT, IsPhoneNumberVerified = c.PhoneNumberConfirmed, - Role = new RoleResponseDTO { Name = Constants.USER_TYPE_CLIENT }, + Role = new RoleResponseDTO { Id = c.Id, Name = Constants.USER_TYPE_CLIENT }, + About = c.About, CompanyName = c.CompanyName, Projects = c.Projects }).FirstOrDefaultAsync(); diff --git a/Migrations/20241101210734_InitialMig.Designer.cs b/Migrations/20241101210734_InitialMig.Designer.cs deleted file mode 100644 index 8b6fe4e..0000000 --- a/Migrations/20241101210734_InitialMig.Designer.cs +++ /dev/null @@ -1,373 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241101210734_InitialMig")] - partial class InitialMig - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241104104334_otp-mig.Designer.cs b/Migrations/20241104104334_otp-mig.Designer.cs deleted file mode 100644 index aeebb3d..0000000 --- a/Migrations/20241104104334_otp-mig.Designer.cs +++ /dev/null @@ -1,396 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241104104334_otp-mig")] - partial class otpmig - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Otp", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps"); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241104104334_otp-mig.cs b/Migrations/20241104104334_otp-mig.cs deleted file mode 100644 index 8ed949b..0000000 --- a/Migrations/20241104104334_otp-mig.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class otpmig : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "otps", - columns: table => new - { - PhoneNumber = table.Column(type: "TEXT", nullable: false), - Code = table.Column(type: "TEXT", nullable: false), - CreatedDate = table.Column(type: "TEXT", nullable: false), - ExpiresAt = table.Column(type: "TEXT", nullable: false), - IsUsed = table.Column(type: "INTEGER", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_otps", x => x.PhoneNumber); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "otps"); - } - } -} diff --git a/Migrations/20241104112027_otp-mig-with-check.Designer.cs b/Migrations/20241104112027_otp-mig-with-check.Designer.cs deleted file mode 100644 index b362c4b..0000000 --- a/Migrations/20241104112027_otp-mig-with-check.Designer.cs +++ /dev/null @@ -1,399 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241104112027_otp-mig-with-check")] - partial class otpmigwithcheck - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Otp", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241104112027_otp-mig-with-check.cs b/Migrations/20241104112027_otp-mig-with-check.cs deleted file mode 100644 index 0021723..0000000 --- a/Migrations/20241104112027_otp-mig-with-check.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class otpmigwithcheck : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddCheckConstraint( - name: "CK_CODE", - table: "otps", - sql: "length([Code]) = 6"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropCheckConstraint( - name: "CK_CODE", - table: "otps"); - } - } -} diff --git a/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.Designer.cs b/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.Designer.cs deleted file mode 100644 index b9577f0..0000000 --- a/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.Designer.cs +++ /dev/null @@ -1,402 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241104134504_unique-phoneNumber-aspnetusers-mig")] - partial class uniquephoneNumberaspnetusersmig - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.cs b/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.cs deleted file mode 100644 index f4e2359..0000000 --- a/Migrations/20241104134504_unique-phoneNumber-aspnetusers-mig.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class uniquephoneNumberaspnetusersmig : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateIndex( - name: "IX_AspNetUsers_PhoneNumber", - table: "AspNetUsers", - column: "PhoneNumber", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_AspNetUsers_PhoneNumber", - table: "AspNetUsers"); - } - } -} diff --git a/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.Designer.cs b/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.Designer.cs deleted file mode 100644 index b63da83..0000000 --- a/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.Designer.cs +++ /dev/null @@ -1,413 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241105102718_Make_otp_phonenumber_foreignkey_mig")] - partial class Make_otp_phonenumber_foreignkey_mig - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.User", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.cs b/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.cs deleted file mode 100644 index f4f0b39..0000000 --- a/Migrations/20241105102718_Make_otp_phonenumber_foreignkey_mig.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class Make_otp_phonenumber_foreignkey_mig : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "PhoneNumber", - table: "AspNetUsers", - type: "TEXT", - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "TEXT", - oldNullable: true); - - migrationBuilder.AddUniqueConstraint( - name: "AK_AspNetUsers_PhoneNumber", - table: "AspNetUsers", - column: "PhoneNumber"); - - migrationBuilder.AddForeignKey( - name: "FK_otps_AspNetUsers_PhoneNumber", - table: "otps", - column: "PhoneNumber", - principalTable: "AspNetUsers", - principalColumn: "PhoneNumber", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_otps_AspNetUsers_PhoneNumber", - table: "otps"); - - migrationBuilder.DropUniqueConstraint( - name: "AK_AspNetUsers_PhoneNumber", - table: "AspNetUsers"); - - migrationBuilder.AlterColumn( - name: "PhoneNumber", - table: "AspNetUsers", - type: "TEXT", - nullable: true, - oldClrType: typeof(string), - oldType: "TEXT"); - } - } -} diff --git a/Migrations/20241105131703_add-createdAt-in-projects.Designer.cs b/Migrations/20241105131703_add-createdAt-in-projects.Designer.cs deleted file mode 100644 index 95be5e2..0000000 --- a/Migrations/20241105131703_add-createdAt-in-projects.Designer.cs +++ /dev/null @@ -1,416 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241105131703_add-createdAt-in-projects")] - partial class addcreatedAtinprojects - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.User", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241105131703_add-createdAt-in-projects.cs b/Migrations/20241105131703_add-createdAt-in-projects.cs deleted file mode 100644 index 88968cc..0000000 --- a/Migrations/20241105131703_add-createdAt-in-projects.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class addcreatedAtinprojects : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "CreatedAt", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "CreatedAt", - table: "Projects"); - } - } -} diff --git a/Migrations/20241109125128_ProjectModifications.Designer.cs b/Migrations/20241109125128_ProjectModifications.Designer.cs deleted file mode 100644 index 51597dc..0000000 --- a/Migrations/20241109125128_ProjectModifications.Designer.cs +++ /dev/null @@ -1,443 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241109125128_ProjectModifications")] - partial class ProjectModifications - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Budget") - .HasColumnType("TEXT"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("INTEGER"); - - b.Property("FreelancerId") - .HasColumnType("INTEGER"); - - b.Property("PriceType") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("QualificationName") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("FreelancerId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.User", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") - .WithMany() - .HasForeignKey("FreelancerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - - b.Navigation("Freelancer"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241109125128_ProjectModifications.cs b/Migrations/20241109125128_ProjectModifications.cs deleted file mode 100644 index 5c1edac..0000000 --- a/Migrations/20241109125128_ProjectModifications.cs +++ /dev/null @@ -1,94 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class ProjectModifications : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "Budget", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: 0m); - - migrationBuilder.AddColumn( - name: "Duration", - table: "Projects", - type: "INTEGER", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "FreelancerId", - table: "Projects", - type: "INTEGER", - nullable: false, - defaultValue: 0L); - - migrationBuilder.AddColumn( - name: "PriceType", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: ""); - - migrationBuilder.AddColumn( - name: "QualificationName", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: ""); - - migrationBuilder.CreateIndex( - name: "IX_Projects_FreelancerId", - table: "Projects", - column: "FreelancerId"); - - migrationBuilder.AddForeignKey( - name: "FK_Projects_Freelancers_FreelancerId", - table: "Projects", - column: "FreelancerId", - principalTable: "Freelancers", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Projects_Freelancers_FreelancerId", - table: "Projects"); - - migrationBuilder.DropIndex( - name: "IX_Projects_FreelancerId", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "Budget", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "Duration", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "FreelancerId", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "PriceType", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "QualificationName", - table: "Projects"); - } - } -} diff --git a/Migrations/20241109131530_ProjectModifications2.cs b/Migrations/20241109131530_ProjectModifications2.cs deleted file mode 100644 index 0d2141c..0000000 --- a/Migrations/20241109131530_ProjectModifications2.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class ProjectModifications2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/Migrations/20241109131530_ProjectModifications2.Designer.cs b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs similarity index 88% rename from Migrations/20241109131530_ProjectModifications2.Designer.cs rename to Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs index 85d1de7..7cdae4f 100644 --- a/Migrations/20241109131530_ProjectModifications2.Designer.cs +++ b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs @@ -11,8 +11,8 @@ namespace AonFreelancing.Migrations { [DbContext(typeof(MainAppContext))] - [Migration("20241109131530_ProjectModifications2")] - partial class ProjectModifications2 + [Migration("20241114201856_Cr1Cr2Cr3Cr4Mig")] + partial class Cr1Cr2Cr3Cr4Mig { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -53,16 +53,15 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("TEXT"); b.Property("Code") - .IsRequired() .HasColumnType("TEXT"); - b.Property("CreatedDate") + b.Property("CreatedDate") .HasColumnType("TEXT"); - b.Property("ExpiresAt") + b.Property("ExpiresAt") .HasColumnType("TEXT"); - b.Property("IsUsed") + b.Property("IsUsed") .HasColumnType("INTEGER"); b.HasKey("PhoneNumber"); @@ -95,7 +94,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("Duration") .HasColumnType("INTEGER"); - b.Property("FreelancerId") + b.Property("FreelancerId") .HasColumnType("INTEGER"); b.Property("PriceType") @@ -106,6 +105,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("Title") .IsRequired() .HasColumnType("TEXT"); @@ -119,12 +122,43 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("Projects"); }); + modelBuilder.Entity("AonFreelancing.Models.TempOTP", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Code") + .HasColumnType("TEXT"); + + b.Property("CreatedDate") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("IsUsed") + .HasColumnType("INTEGER"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("TempOtps"); + }); + modelBuilder.Entity("AonFreelancing.Models.User", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("About") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("AccessFailedCount") .HasColumnType("INTEGER"); @@ -194,6 +228,22 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.UseTptMappingStrategy(); }); + modelBuilder.Entity("AonFreelancing.Models.UsersTemp", b => + { + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("IsVerfied") + .HasColumnType("INTEGER"); + + b.Property("VerifyTime") + .HasColumnType("TEXT"); + + b.HasKey("PhoneNumber"); + + b.ToTable("UsersTemps", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") @@ -346,9 +396,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") .WithMany() - .HasForeignKey("FreelancerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("FreelancerId"); b.Navigation("Client"); diff --git a/Migrations/20241101210734_InitialMig.cs b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs similarity index 76% rename from Migrations/20241101210734_InitialMig.cs rename to Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs index 1dd0f9d..d62bbe0 100644 --- a/Migrations/20241101210734_InitialMig.cs +++ b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs @@ -6,7 +6,7 @@ namespace AonFreelancing.Migrations { /// - public partial class InitialMig : Migration + public partial class Cr1Cr2Cr3Cr4Mig : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -33,6 +33,7 @@ protected override void Up(MigrationBuilder migrationBuilder) Id = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), Name = table.Column(type: "TEXT", nullable: false), + About = table.Column(type: "TEXT", nullable: false), UserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), Email = table.Column(type: "TEXT", maxLength: 256, nullable: true), @@ -41,7 +42,7 @@ protected override void Up(MigrationBuilder migrationBuilder) PasswordHash = table.Column(type: "TEXT", nullable: true), SecurityStamp = table.Column(type: "TEXT", nullable: true), ConcurrencyStamp = table.Column(type: "TEXT", nullable: true), - PhoneNumber = table.Column(type: "TEXT", nullable: true), + PhoneNumber = table.Column(type: "TEXT", nullable: false), PhoneNumberConfirmed = table.Column(type: "INTEGER", nullable: false), TwoFactorEnabled = table.Column(type: "INTEGER", nullable: false), LockoutEnd = table.Column(type: "TEXT", nullable: true), @@ -51,6 +52,37 @@ protected override void Up(MigrationBuilder migrationBuilder) constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); + table.UniqueConstraint("AK_AspNetUsers_PhoneNumber", x => x.PhoneNumber); + }); + + migrationBuilder.CreateTable( + name: "TempOtps", + columns: table => new + { + ID = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + PhoneNumber = table.Column(type: "TEXT", nullable: false), + Code = table.Column(type: "TEXT", nullable: true), + CreatedDate = table.Column(type: "TEXT", nullable: true), + ExpiresAt = table.Column(type: "TEXT", nullable: true), + IsUsed = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_TempOtps", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "UsersTemps", + columns: table => new + { + PhoneNumber = table.Column(type: "TEXT", nullable: false), + IsVerfied = table.Column(type: "INTEGER", nullable: true), + VerifyTime = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UsersTemps", x => x.PhoneNumber); }); migrationBuilder.CreateTable( @@ -197,6 +229,28 @@ protected override void Up(MigrationBuilder migrationBuilder) onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "otps", + columns: table => new + { + PhoneNumber = table.Column(type: "TEXT", nullable: false), + Code = table.Column(type: "TEXT", nullable: true), + CreatedDate = table.Column(type: "TEXT", nullable: true), + ExpiresAt = table.Column(type: "TEXT", nullable: true), + IsUsed = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_otps", x => x.PhoneNumber); + table.CheckConstraint("CK_CODE", "length([Code]) = 6"); + table.ForeignKey( + name: "FK_otps_AspNetUsers_PhoneNumber", + column: x => x.PhoneNumber, + principalTable: "AspNetUsers", + principalColumn: "PhoneNumber", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "SystemUsers", columns: table => new @@ -224,7 +278,14 @@ protected override void Up(MigrationBuilder migrationBuilder) .Annotation("Sqlite:Autoincrement", true), Title = table.Column(type: "TEXT", nullable: false), Description = table.Column(type: "TEXT", nullable: false), - ClientId = table.Column(type: "INTEGER", nullable: false) + ClientId = table.Column(type: "INTEGER", nullable: false), + CreatedAt = table.Column(type: "TEXT", nullable: false), + PriceType = table.Column(type: "TEXT", nullable: false), + Duration = table.Column(type: "INTEGER", nullable: false), + QualificationName = table.Column(type: "TEXT", nullable: false), + Budget = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "TEXT", nullable: false), + FreelancerId = table.Column(type: "INTEGER", nullable: true) }, constraints: table => { @@ -235,6 +296,11 @@ protected override void Up(MigrationBuilder migrationBuilder) principalTable: "Clients", principalColumn: "Id", onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Projects_Freelancers_FreelancerId", + column: x => x.FreelancerId, + principalTable: "Freelancers", + principalColumn: "Id"); }); migrationBuilder.CreateIndex( @@ -268,6 +334,12 @@ protected override void Up(MigrationBuilder migrationBuilder) table: "AspNetUsers", column: "NormalizedEmail"); + migrationBuilder.CreateIndex( + name: "IX_AspNetUsers_PhoneNumber", + table: "AspNetUsers", + column: "PhoneNumber", + unique: true); + migrationBuilder.CreateIndex( name: "UserNameIndex", table: "AspNetUsers", @@ -278,6 +350,11 @@ protected override void Up(MigrationBuilder migrationBuilder) name: "IX_Projects_ClientId", table: "Projects", column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_Projects_FreelancerId", + table: "Projects", + column: "FreelancerId"); } /// @@ -299,7 +376,7 @@ protected override void Down(MigrationBuilder migrationBuilder) name: "AspNetUserTokens"); migrationBuilder.DropTable( - name: "Freelancers"); + name: "otps"); migrationBuilder.DropTable( name: "Projects"); @@ -307,12 +384,21 @@ protected override void Down(MigrationBuilder migrationBuilder) migrationBuilder.DropTable( name: "SystemUsers"); + migrationBuilder.DropTable( + name: "TempOtps"); + + migrationBuilder.DropTable( + name: "UsersTemps"); + migrationBuilder.DropTable( name: "AspNetRoles"); migrationBuilder.DropTable( name: "Clients"); + migrationBuilder.DropTable( + name: "Freelancers"); + migrationBuilder.DropTable( name: "AspNetUsers"); } diff --git a/Migrations/MainAppContextModelSnapshot.cs b/Migrations/MainAppContextModelSnapshot.cs index 703f24a..7739f65 100644 --- a/Migrations/MainAppContextModelSnapshot.cs +++ b/Migrations/MainAppContextModelSnapshot.cs @@ -50,16 +50,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("TEXT"); b.Property("Code") - .IsRequired() .HasColumnType("TEXT"); - b.Property("CreatedDate") + b.Property("CreatedDate") .HasColumnType("TEXT"); - b.Property("ExpiresAt") + b.Property("ExpiresAt") .HasColumnType("TEXT"); - b.Property("IsUsed") + b.Property("IsUsed") .HasColumnType("INTEGER"); b.HasKey("PhoneNumber"); @@ -92,7 +91,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Duration") .HasColumnType("INTEGER"); - b.Property("FreelancerId") + b.Property("FreelancerId") .HasColumnType("INTEGER"); b.Property("PriceType") @@ -103,6 +102,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("Title") .IsRequired() .HasColumnType("TEXT"); @@ -116,12 +119,43 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Projects"); }); + modelBuilder.Entity("AonFreelancing.Models.TempOTP", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Code") + .HasColumnType("TEXT"); + + b.Property("CreatedDate") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("IsUsed") + .HasColumnType("INTEGER"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("TempOtps"); + }); + modelBuilder.Entity("AonFreelancing.Models.User", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); + b.Property("About") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("AccessFailedCount") .HasColumnType("INTEGER"); @@ -191,6 +225,22 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.UseTptMappingStrategy(); }); + modelBuilder.Entity("AonFreelancing.Models.UsersTemp", b => + { + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("IsVerfied") + .HasColumnType("INTEGER"); + + b.Property("VerifyTime") + .HasColumnType("TEXT"); + + b.HasKey("PhoneNumber"); + + b.ToTable("UsersTemps", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") @@ -343,9 +393,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") .WithMany() - .HasForeignKey("FreelancerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("FreelancerId"); b.Navigation("Client"); diff --git a/Models/ApiResponse.cs b/Models/ApiResponse.cs index dab67e5..fdc4fb4 100644 --- a/Models/ApiResponse.cs +++ b/Models/ApiResponse.cs @@ -5,8 +5,10 @@ public class ApiResponse public bool IsSuccess { get; set; } public T Results { get; set; } public IList Errors { get; set; } + public string Message { get; set; } } + public class Error { public string Code { get; set; } diff --git a/Models/Client.cs b/Models/Client.cs index 503bea3..73d650b 100644 --- a/Models/Client.cs +++ b/Models/Client.cs @@ -16,7 +16,7 @@ public class Client : User // Has many projects, 1-m public List? Projects { get; set; } - + //public override void DisplayProfile() //{ diff --git a/Models/DTOs/ClientDTO.cs b/Models/DTOs/ClientDTO.cs index c49da3c..1ceda1a 100644 --- a/Models/DTOs/ClientDTO.cs +++ b/Models/DTOs/ClientDTO.cs @@ -2,7 +2,7 @@ namespace AonFreelancing.Models.DTOs { - public class ClientDTO:UserOutDTO + public class ClientDTO : UserOutDTO { public string CompanyName { get; set; } @@ -10,10 +10,10 @@ public class ClientDTO:UserOutDTO public IEnumerable Projects { get; set; } } - public class ClientInputDTO: UserDTO + public class ClientInputDTO : UserDTO { [Required] - [MinLength(4,ErrorMessage ="Invalid Company Name")] + [MinLength(4, ErrorMessage = "Invalid Company Name")] public string CompanyName { get; set; } } diff --git a/Models/DTOs/FreelancerDTO.cs b/Models/DTOs/FreelancerDTO.cs index 61597cc..4a27531 100644 --- a/Models/DTOs/FreelancerDTO.cs +++ b/Models/DTOs/FreelancerDTO.cs @@ -2,7 +2,7 @@ namespace AonFreelancing.Models.DTOs { - public class FreelancerDTO:UserDTO + public class FreelancerDTO : UserDTO { public string Skills { get; set; } @@ -13,8 +13,10 @@ public class FreelancerRequestDTO : UserDTO public string Skills { get; set; } } - public class FreelancerResponseDTO : UserResponseDTO { + public class FreelancerResponseDTO : UserResponseDTO + { public string? Skills { get; set; } - + + } } diff --git a/Models/DTOs/ProjectInputDTO.cs b/Models/DTOs/ProjectInputDTO.cs index 9c85634..4b5429c 100644 --- a/Models/DTOs/ProjectInputDTO.cs +++ b/Models/DTOs/ProjectInputDTO.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Diagnostics.CodeAnalysis; namespace AonFreelancing.Models.DTOs @@ -6,24 +7,30 @@ namespace AonFreelancing.Models.DTOs public class ProjectInputDTO { [Required] - [MaxLength(512, ErrorMessage ="Length too long")] + [MaxLength(512, ErrorMessage = "the Title should be less than 512 char")] public string Title { get; set; } - [AllowNull] + [MaxLength(1024, ErrorMessage = "the Description should be less than 1024 char")] public string Description { get; set; } [Required] + [AllowedValues("UI/UX", "FrontEnd", "BackEnd", "Mobile Application", "FullStack")] public string QualificationName { get; set; } - [Required] - public int Duration { get; set; }//Number of days - + public DateTime CreatedAt { get; set; } [Required] - [AllowedValues("PerHour","Fixed")] - public string PriceType { get; set; } - + public int Duration { get; set; } [Required] + [Range(0, double.MaxValue, ErrorMessage = "specify your budget correctly")] public decimal Budget { get; set; } + [Required] + [AllowedValues("PerHour", "Fixed")] + public string PriceType { get; set; } + [Required] + [AllowedValues("Available", "Closed")] + public string Status { get; set; } + [Required] + public long ClientId { get; set; }//FK } diff --git a/Models/DTOs/ProjectOutDTO.cs b/Models/DTOs/ProjectOutDTO.cs index b460cd4..750653d 100644 --- a/Models/DTOs/ProjectOutDTO.cs +++ b/Models/DTOs/ProjectOutDTO.cs @@ -6,12 +6,16 @@ namespace AonFreelancing.Models.DTOs { public class ProjectOutDTO { - public int Id { get; set; } + public string Title { get; set; } public string Description { get; set; } - - public int ClientId { get; set; }//FK - + public string Status { get; set; } + public decimal Budget { get; set; } + public int Duration { get; set; } + public string PriceType { get; set; } + public string QualificationName { get; set; } public DateTime CreatedAt { get; set; } + public string CreationTimeAgo { get; set; } + } } diff --git a/Models/DTOs/UserDTO.cs b/Models/DTOs/UserDTO.cs index 71b52ba..d97115d 100644 --- a/Models/DTOs/UserDTO.cs +++ b/Models/DTOs/UserDTO.cs @@ -14,7 +14,7 @@ public class UserDTO [StringLength(32)] public string PhoneNumber { get; set; } - [MinLength(4,ErrorMessage ="Too short password")] + [MinLength(4, ErrorMessage = "Too short password")] public string Password { get; set; } @@ -39,6 +39,7 @@ public class UserResponseDTO public bool IsPhoneNumberVerified { get; set; } public string UserType { get; set; } + public string About { get; set; } public RoleResponseDTO Role { get; set; } } } diff --git a/Models/OTP.cs b/Models/OTP.cs index 925836b..97e91e3 100644 --- a/Models/OTP.cs +++ b/Models/OTP.cs @@ -10,10 +10,10 @@ public class OTP [Key] public string PhoneNumber { get; set; } - public string Code { get; set; } - public DateTime CreatedDate { get; set; } - public DateTime ExpiresAt { get; set; } - public bool IsUsed { get; set; } + public string? Code { get; set; } + public DateTime? CreatedDate { get; set; } + public DateTime? ExpiresAt { get; set; } + public bool? IsUsed { get; set; } } } diff --git a/Models/Project.cs b/Models/Project.cs index d3f04bc..b07ebc6 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -1,4 +1,5 @@ -using System.ComponentModel.DataAnnotations; +using AonFreelancing.Models.DTOs; +using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Diagnostics.CodeAnalysis; @@ -6,7 +7,7 @@ namespace AonFreelancing.Models { //Entity [Table("Projects")] - public class Project + public class Project { public int Id { get; set; } @@ -30,18 +31,16 @@ public class Project public string QualificationName { get; set; } - public decimal Budget { get; set; } + public decimal Budget { get; set; } + public string Status { get; set; } + public long? FreelancerId { get; set; }//FK - [AllowNull] - public long FreelancerId { get; set; } - - [AllowNull] + // Belongs to a Freelancers [ForeignKey("FreelancerId")] public Freelancer Freelancer { get; set; } - } } diff --git a/Models/Requests/RegisterRequest.cs b/Models/Requests/RegisterInfoRequest.cs similarity index 80% rename from Models/Requests/RegisterRequest.cs rename to Models/Requests/RegisterInfoRequest.cs index 87313b1..0bda8c8 100644 --- a/Models/Requests/RegisterRequest.cs +++ b/Models/Requests/RegisterInfoRequest.cs @@ -2,7 +2,8 @@ namespace AonFreelancing.Models.Requests { - public class RegRequest + + public class RegisterInfoRequest { [Required] [MinLength(2)] @@ -12,6 +13,10 @@ public class RegRequest [MinLength(4)] public string Username { get; set; } + [Required] + [EmailAddress] + public string Email { get; set; } + [Required] [Phone] public string PhoneNumber { get; set; } @@ -25,13 +30,11 @@ public class RegRequest [AllowedValues("Freelancer","Client")] public string UserType { get; set; } - // For freelancer type only public string? Skills { get; set; } - // For Client user type only - - public string? CompanyName { get; set; } + public string? About { get; set; } + } } diff --git a/Models/Requests/RegisterPhoneRequest.cs b/Models/Requests/RegisterPhoneRequest.cs new file mode 100644 index 0000000..1d3f322 --- /dev/null +++ b/Models/Requests/RegisterPhoneRequest.cs @@ -0,0 +1,10 @@ +using System.ComponentModel.DataAnnotations; + +namespace AonFreelancing.Models.Requests +{ + public class RegisterPhoneRequest + { + + public string PhoneNumber { get; set; } + } +} diff --git a/Models/Requests/VerifyReq.cs b/Models/Requests/VerifyReq.cs index 57ec762..82b946e 100644 --- a/Models/Requests/VerifyReq.cs +++ b/Models/Requests/VerifyReq.cs @@ -6,11 +6,11 @@ public class VerifyReq { [Required] - [Length(14,14)] - public string Phone { get; set; } + [Length(14, 14)] + public string Phone { get; set; } [Required] - [Length(6,6)] - public string Otp { get; set; } + [Length(6, 6)] + public string Otp { get; set; } } } diff --git a/Models/TempOTP.cs b/Models/TempOTP.cs new file mode 100644 index 0000000..1af49d9 --- /dev/null +++ b/Models/TempOTP.cs @@ -0,0 +1,17 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace AonFreelancing.Models +{ + [Table("TempOtps")] + public class TempOTP + { + [Key] + public int ID { get; set; } + public string PhoneNumber { get; set; } + public string? Code { get; set; } + public DateTime? CreatedDate { get; set; } + public DateTime? ExpiresAt { get; set; } + public bool? IsUsed { get; set; } + } +} diff --git a/Models/User.cs b/Models/User.cs index bfc9279..6d59833 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -17,5 +17,7 @@ namespace AonFreelancing.Models public class User : IdentityUser { public string Name { get; set; } + + public string About { get; set; } } } diff --git a/Models/UsersTemp.cs b/Models/UsersTemp.cs new file mode 100644 index 0000000..f0da8b8 --- /dev/null +++ b/Models/UsersTemp.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Diagnostics.CodeAnalysis; + +namespace AonFreelancing.Models +{ + [Table("UsersTemp")] + public class UsersTemp + { + [Key] + [Required] + public string PhoneNumber { get; set; } + [AllowNull] + public bool? IsVerfied { get; set; } + [AllowNull] + public DateTime? VerifyTime { get; set; } + + } +} diff --git a/Program.cs b/Program.cs index 76d8642..6db36b9 100644 --- a/Program.cs +++ b/Program.cs @@ -9,6 +9,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi.Models; using System.Text; namespace AonFreelancing @@ -28,8 +29,9 @@ public static void Main(string[] args) builder.Services.AddSingleton(); builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddDbContext(options => options.UseSqlite("Data Source=aon.db")); - builder.Services.AddIdentity() + builder.Services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); builder.Configuration.AddJsonFile("appsettings.json"); @@ -59,6 +61,35 @@ public static void Main(string[] args) }); + builder.Services.AddAuthorization(); + builder.Services.AddSwaggerGen(options => + { + options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme + { + Name = "Authorization", + Type = SecuritySchemeType.ApiKey, + Scheme = "Bearer", + BearerFormat = "JWT", + In = ParameterLocation.Header, + Description = "Enter 'Bearer' followed by a space and then your JWT token" + }); + + options.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference + { + Type = ReferenceType.SecurityScheme, + Id = "Bearer" + } + }, + new string[] {} + } + }); + }); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/aon.db b/aon.db index c962e03a30db12f5c5e5532c541a86ed80ffa19c..38eb5e8a5a37ad37f3c7cfc05c52cdf4903af204 100644 GIT binary patch delta 2053 zcmeHITTC2P7@mJ-c4l{HXJ=tAv)3{^AeVx`vOvH@VY{r&rj&Bo8fe;-+kmTdm(DJU z#5QgrZDV}^I)U?8Yu~CSZ8ruVOtnc9AB?FnnwmCgtPecktIk?T z$$vTL|IhjU@6Y{g%;ikWzA};^h${RShi9cB+(Z(MQ=0}X0%5D5a0pxcl6jaPHgy?$ zOlIb$p@WLhe?SdI5*x&Z7PJjBU1f|o^fLO&0d8a?L8i+WhppN@YA*;{ka6b&^colh zMjWWuZM5$U5^Y-yTeRN{4QQMMPrj2$gNCRY?GEdvt&0?={mM3gMfYwtb_1BTlcomX zu)u-l{lMqHG_^t3nW&K!gF#pr$c~NAD2FqOnn@@pW;3OgDLNR7Bw|t`vadHL$t8s> z)uQWe2x|9Cwxdsr`v>C(BZDK-f!Ig`Z95!)Xdl==?$_7>Gx znVgzWBu^-^l!y%{bR}=D3!4~me^AePq;$gZP-$&maIvfy2*BcddIp8y4`pZdBnq=} zcl1Ryj=dOJkJiP>?2ZC;i%^9=cY{nt)05g|d|7i&uxnQt4k0I$X&wuQ*73rIqsIZB zJ#Apc%1ZbkqWxw5#1I)z&t*~031a>#Cj$D$4Xxs2Yl@Em1Wb zRa*}xr#l*(8$-=z-SGh-Jiv}W2y&2$n_ld9W0daB)1!|oZYD-fw zI^hvvg(<@Nz3?gj@L%9vpdv6;0K9^qsrRetx0H!& zrZ{`i_3v6RG+0Oc$9z2IE={qgfUQP76kNoc_2hg;G5yCfWYwig*}_`#kON_@Lt zX#skj&IDNzy>ElPm{7X|;6)pL2-xLa7gIMaVWaCFsD{ddQ5bPv;HWdy9`vIfLimDM z2Mj_09dSSqU(qQCyhfh(Bexe?p#t6Uf)Bmvg(f`tec(ZxUf|J9FW6vDLD`E>#qxH% qfo_`eK{K|x-*2A1&Kn@cj*BxhvfO delta 4485 zcmcf^YiwK9`5qr%zwMKhCQh2BapHzH4=4BON7FQQVkdQCJ5FLJ4kJn(`#N>&I1f90 zpmlEA0;;B|3s>}xNoZ1q#H6igBSMwn$AkoEPYHFJ*eC+FGO?{=8ig?!XzW}&&U+e~ z5SGrp=YFsAo$u`n7ql1N)_l9BoFoXsidQXO3cT3mRKemGEn@uk8AQ1nlJSdt#mC|%6suP<*Gti6kuxe!nTmz(DWgcn~%d}OZ z1zMDbORPqE*a}*Kc4Zzu3P`QWJYri#>%=;;N~ya9)nW(P3N!^F7s#UksKggltw4_Lad~c2E z5dyt|UO-pT2&y#QF+FE`WTm_;W6Ik!FjCD>3`f(Hi)Lw_r6xlQvnPdkE-;%&B~$TO zE;XCUGR`)tjiy@FaAcjF;c3RXBYBaUR>6r9HIIcmD0VWINZ8^FLM$gF+&No5m9fng zkINQ$I!HLb&O7Z!ohWB8XLtSA1V{r&ZKfD zZ1EF9{8aIvIt6sC(^4GEawXa#K?8tYB?6kEDF-I-Wm36REFCCmt0RaC?3$Ydx`Td- zuA?;Kk;e44=_Yo~_e}YNFao}aXEX=k$U5PF_ldd{PL$|&_QnQhsO)(-zfS#y{Xp_? zw#4>@JWz0evJnoha}`ZLw%zt{4|J`QZL+#zFYMB;T5G$#Xonttd=1aX25}iuk#UsK2@TR(EBUp)E$JBkN`^gp^_iu zvy}3vPJuok(7(_J=&zXOP1K--5NMSIserhqD3kzykwszmWV(CkFPQEPRH;$|Ex=;b zN+1&|Nc^oOpA9K38h}0|(1++PO!#ZmQU)P$z&)F>BuiGqs_9gas0p02^u`h?*>V7V zLZDAD!(Bvcu~d?TM0tbi??2> zHb6;6*xl{-S{ko32}b<>);vaZFD9miT!S|3jbdmC zgAv7O-jPqnmKwwkoE{+?Ur5c#U1=xm;zFTeVSVyj6~cnovueZ9tr!tnNX3QlxjA76 znL~@Q^jaqj#%6Y+38!-DEpVkD3zqT>sFF-9Xp}e>G)c9MpbD77${$Y`_*Q*6)d%4xExwG$<1_x?S=HiH*8)=?8ctP4J*xeA8eOUjPQ_G7o;F;w>t(&$>3w zTripr)IS`nD~u}N)D}cE)K`g5=?{u88xD%!H`Ge! zU7$w1sBaLx`bP1W`Z_%7gv7ggi}(%9(5&AhcBu@a)yOLiSBaE#=rFh+?3QAO!4bvz zO6f``;6Sx>^a!@#?>a#{Hch?@KlUBLhN+U_eoS2eU6(=TBI#R400r)o%DS-WD~lHG z@4}LH$)tA7j~UI^i zyk=`8>Y7frsLed)KvLIXtUy6^woOij!VrpsLf3Tp>&XDgQYCT&1dAtVw>D#65UPRgFNadG>U zEf#kOwpfy4dB(-XV}g)fJQb6*aSyri&*yfJ$EM|-w#*75DeqqwJ|Oqvyio zXHN%nC#kVePu4lzKf?Bn4W;RbGvjT~=Th8sa>yRbh7!K{v2eS8VAS2&x!Gi##}o1T z#(Mg~gO0#xWGosO?+b<93_mpJ;f^tb*~KM~YWpoXhDq4@7;j6^jNQg1<8j;6l#{b1 zolMLgr#Z@%Oy-k#&XJ9|?HcZ|vo9VUp6^XZ?Pr7Oe#R|y)2ID>u0PV=easUXj}3Sk zXPlmLJnmqNe->vV$IDyj_Vy7=LSZZh{qA^dtf}k_6GAk zgQLDaU!Xq{@yMzy^^@xtsVTan#u<-s0v&hSI475|aRSBKoV?RzV`B`CDsC#_;+^SK zdUiDywp}GK9Lp_6$L9vm2qE`C+P^SAe9YaK8hoH7GBM^oL7zO6TXb;TqK`|l?ZUJt z9P$j#3)z4(`_SkjWj{STy~QK;;P|NBbByoi17nV3q4DrgAQE+W`Ci8e7mNnDsH_c+ z%IlP+m^fcfQWXCQJV@Xv{y}8G@%wL6J_J=w)jd6$%@M=0PRhZ{e<^GVMT!*k!#?{8UXo_|^HlrAN6-CnwQ>-+%33OYD{)XPb UmUsaAgHi0(1iEZuk zwQxo^^jz=H*QVL+p#lv){eDUdht}{Cfn*9?)^su(qbmfC6lm0Sz0}(y>nK1Vc>*2& zrq6BN(|{i8i9RN;K{`U3$$uJ@jcQY d0tg_000IagfB*srAb>zx1?n}K*488T{SVX;KX?ED delta 93 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 Date: Wed, 20 Nov 2024 23:00:49 +0300 Subject: [PATCH 02/16] =?UTF-8?q?=D8=B4=D9=83=D9=86=D9=8A=20=D9=88=D9=85?= =?UTF-8?q?=D8=AF=D8=A7=D9=8A=D8=AA=D8=AD=D9=88=D9=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Models/Otp.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Models/Otp.cs b/Models/Otp.cs index 925836b..97e91e3 100644 --- a/Models/Otp.cs +++ b/Models/Otp.cs @@ -10,10 +10,10 @@ public class OTP [Key] public string PhoneNumber { get; set; } - public string Code { get; set; } - public DateTime CreatedDate { get; set; } - public DateTime ExpiresAt { get; set; } - public bool IsUsed { get; set; } + public string? Code { get; set; } + public DateTime? CreatedDate { get; set; } + public DateTime? ExpiresAt { get; set; } + public bool? IsUsed { get; set; } } } From 852eb35342f4083641b2ff030140f94aeb6b2b80 Mon Sep 17 00:00:00 2001 From: KAJOiq Date: Thu, 21 Nov 2024 01:32:00 +0300 Subject: [PATCH 03/16] =?UTF-8?q?Revert=20"=D8=B4=D9=83=D9=86=D9=8A=20?= =?UTF-8?q?=D9=88=D9=85=D8=AF=D8=A7=D9=8A=D8=AA=D8=AD=D9=88=D9=84"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6ce723b5bf608d4ab7944857f844e6b0a6fd68be. --- Models/Otp.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Models/Otp.cs b/Models/Otp.cs index 97e91e3..925836b 100644 --- a/Models/Otp.cs +++ b/Models/Otp.cs @@ -10,10 +10,10 @@ public class OTP [Key] public string PhoneNumber { get; set; } - public string? Code { get; set; } - public DateTime? CreatedDate { get; set; } - public DateTime? ExpiresAt { get; set; } - public bool? IsUsed { get; set; } + public string Code { get; set; } + public DateTime CreatedDate { get; set; } + public DateTime ExpiresAt { get; set; } + public bool IsUsed { get; set; } } } From fc6ae5296cfa7968b55eebc372f9afe6fc612bec Mon Sep 17 00:00:00 2001 From: KAJOiq Date: Thu, 21 Nov 2024 01:39:41 +0300 Subject: [PATCH 04/16] Task07 done --- Contexts/MainAppContext.cs | 22 +- Controllers/Mobile/v1/ProjectsController.cs | 313 +++++++++++- .../20241113064604_otpToTempUser.Designer.cs | 466 ----------------- Migrations/20241113064604_otpToTempUser.cs | 78 --- ...0241114060939_projectMirgation.Designer.cs | 483 ------------------ Migrations/20241114060939_projectMirgation.cs | 126 ----- ...14072136_reomvedUserTypeColumn.Designer.cs | 483 ------------------ .../20241114072136_reomvedUserTypeColumn.cs | 28 - ...4113925_projectsTableMigration.Designer.cs | 483 ------------------ .../20241114113925_projectsTableMigration.cs | 22 - ...20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs | 199 +++++++- ...cs => 20241120160202_TasksMig.Designer.cs} | 180 ++++++- ...igration.cs => 20241120160202_TasksMig.cs} | 155 +++++- ... 20241120182112_UploadFileMig.Designer.cs} | 251 ++++++++- ...ble.cs => 20241120182112_UploadFileMig.cs} | 13 +- Migrations/MainAppContextModelSnapshot.cs | 141 +++++ Models/Bid.cs | 18 + Models/DTOs/BidInputDto.cs | 14 + Models/DTOs/TaskInputDto.cs | 15 + Models/OTP.cs | 8 +- Models/Project.cs | 6 + Models/Tasks.cs | 15 + Models/User.cs | 6 + Program.cs | 2 - aon.db | Bin 147456 -> 176128 bytes .../f373959e-12c7-4aef-aecb-278313dbb326.jpg | Bin 0 -> 363422 bytes 26 files changed, 1322 insertions(+), 2205 deletions(-) delete mode 100644 Migrations/20241113064604_otpToTempUser.Designer.cs delete mode 100644 Migrations/20241113064604_otpToTempUser.cs delete mode 100644 Migrations/20241114060939_projectMirgation.Designer.cs delete mode 100644 Migrations/20241114060939_projectMirgation.cs delete mode 100644 Migrations/20241114072136_reomvedUserTypeColumn.Designer.cs delete mode 100644 Migrations/20241114072136_reomvedUserTypeColumn.cs delete mode 100644 Migrations/20241114113925_projectsTableMigration.Designer.cs delete mode 100644 Migrations/20241114113925_projectsTableMigration.cs rename Migrations/{20241113063403_InitialMigration.Designer.cs => 20241120160202_TasksMig.Designer.cs} (74%) rename Migrations/{20241113063403_InitialMigration.cs => 20241120160202_TasksMig.cs} (73%) rename Migrations/{20241114063948_userTypeToUserTable.Designer.cs => 20241120182112_UploadFileMig.Designer.cs} (66%) rename Migrations/{20241114063948_userTypeToUserTable.cs => 20241120182112_UploadFileMig.cs} (65%) create mode 100644 Models/Bid.cs create mode 100644 Models/DTOs/BidInputDto.cs create mode 100644 Models/DTOs/TaskInputDto.cs create mode 100644 Models/Tasks.cs create mode 100644 wwwroot/images/f373959e-12c7-4aef-aecb-278313dbb326.jpg diff --git a/Contexts/MainAppContext.cs b/Contexts/MainAppContext.cs index 564bd9d..f0480ee 100644 --- a/Contexts/MainAppContext.cs +++ b/Contexts/MainAppContext.cs @@ -1,6 +1,7 @@ using AonFreelancing.Models; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; +using System.Reflection.Emit; using static System.Net.WebRequestMethods; namespace AonFreelancing.Contexts @@ -32,7 +33,12 @@ public MainAppContext(DbContextOptions contextOptions) : base(co } ======= public DbSet TempUsers { get; set; } +<<<<<<< HEAD + public DbSet Bids { get; set; } + public DbSet Tasks { get; set; } +======= >>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2 +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5 protected override void OnModelCreating(ModelBuilder builder) { @@ -65,7 +71,21 @@ protected override void OnModelCreating(ModelBuilder builder) .ToTable("Projects", tb => tb.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')")); builder.Entity().ToTable("Projects", tb => tb.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')")) .Property(p=>p.Status).HasDefaultValue("Available"); - + + builder.Entity() + .HasOne(b => b.Project) + .WithMany(p => p.Bids) + .HasForeignKey(b => b.ProjectId) + .OnDelete(DeleteBehavior.Cascade); + + builder.Entity() + .HasOne(b => b.Freelancer) + .WithMany(f => f.Bids) + .HasForeignKey(b => b.FreelancerId) + .OnDelete(DeleteBehavior.Cascade); + + + base.OnModelCreating(builder); } } diff --git a/Controllers/Mobile/v1/ProjectsController.cs b/Controllers/Mobile/v1/ProjectsController.cs index 6984fac..57f1438 100644 --- a/Controllers/Mobile/v1/ProjectsController.cs +++ b/Controllers/Mobile/v1/ProjectsController.cs @@ -6,7 +6,10 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +<<<<<<< HEAD +======= using System.IO; +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5 namespace AonFreelancing.Controllers.Mobile.v1 { @@ -149,7 +152,6 @@ public async Task GetClientFeedAsync( .Where(p => qualificationNames.Contains(p.QualificationName)); } - // ORder by LAtest created projects = await query.OrderByDescending(p => p.CreatedAt) .Skip(page * pageSize) .Take(pageSize) @@ -176,6 +178,315 @@ public async Task GetClientFeedAsync( })); } + + [Authorize(Roles = "FREELANCER")] + [HttpPost("{id}/bids")] + public async Task SubmitBidAsync(int id, [FromBody] BidInputDto bidDto) + { + if (!ModelState.IsValid) + return CustomBadRequest(); + + var project = await mainAppContext.Projects.FindAsync(id); + if (project == null) + return NotFound(CreateErrorResponse("404", "Project not found.")); + + var user = await userManager.GetUserAsync(User); + if (user == null || !User.IsInRole("FREELANCER")) + return Forbid(); + + var lastBid = await mainAppContext.Bids + .Where(b => b.ProjectId == id) + .OrderByDescending(b => b.SubmittedAt) + .FirstOrDefaultAsync(); + + if (bidDto.ProposedPrice <= 0 || + (lastBid != null && bidDto.ProposedPrice >= lastBid.ProposedPrice) || + (lastBid == null && bidDto.ProposedPrice >= project.Budget)) + { + return BadRequest(CreateErrorResponse("400", "Invalid proposed price. The proposed price must be positive and lower than the last bid or project budget.")); + } + + var bid = new Bid + { + ProjectId = id, + FreelancerId = user.Id, + ProposedPrice = bidDto.ProposedPrice, + Notes = bidDto.Notes, + Status = "pending", + SubmittedAt = DateTime.Now + }; + + await mainAppContext.Bids.AddAsync(bid); + await mainAppContext.SaveChangesAsync(); + + return Ok(CreateSuccessResponse("Bid submitted successfully.")); + } + + + [Authorize(Roles = "CLIENT")] + [HttpPut("{pid}/bids/{bid}/approve")] + public async Task ApproveBidAsync(int pid, int bid) + { + var project = await mainAppContext.Projects.FindAsync(pid); + if (project == null || project.Status != "Available") + return BadRequest(CreateErrorResponse("400", $"Project status is '{project?.Status}', but must be 'available'.")); + + var bidID = await mainAppContext.Bids.FirstOrDefaultAsync(b => b.Id == bid); + if (bidID == null || bidID.ProjectId != pid || bidID.Status == "approved") + return BadRequest(CreateErrorResponse("400", "Bid not found or already approved.")); + + bidID.Status = "approved"; + bidID.ApprovedAt = DateTime.Now; + + project.Status = "Closed"; + + await mainAppContext.SaveChangesAsync(); + + return Ok(CreateSuccessResponse("Bid approved successfully.")); + } + + + [HttpGet("{id}")] + public async Task GetProjectDetailsAsync(int id) + { + var project = await mainAppContext.Projects + .Where(p => p.Id == id) + .Include(p => p.Bids) + .FirstOrDefaultAsync(); + + if (project == null) + return NotFound(CreateErrorResponse("404", "Project not found.")); + + var orderedBids = project.Bids + .OrderBy(b => b.ProposedPrice) + .Select(b => new + { + b.Id, + b.FreelancerId, + b.ProposedPrice, + b.Notes, + b.Status, + b.SubmittedAt, + b.ApprovedAt + }); + + return Ok(new + { + project.Id, + project.Title, + project.Status, + project.Budget, + Bids = orderedBids + }); + } + + + [Authorize(Roles = "CLIENT")] + [HttpPost("{id}/tasks")] + public async Task CreateTaskAsync(int id, [FromBody] TaskInputDto taskDto) + { + var project = await mainAppContext.Projects.FindAsync(id); + if (project == null || project.Status != "Closed") + return BadRequest(CreateErrorResponse("400", "Project not found or not closed.")); + + var task = new Tasks + { + ProjectId = id, + Name = taskDto.Name, + DeadlineAt = taskDto.DeadlineAt, + Notes = taskDto.Notes + }; + + await mainAppContext.Tasks.AddAsync(task); + await mainAppContext.SaveChangesAsync(); + + return Ok(CreateSuccessResponse("Task created successfully.")); + } + + + [Authorize(Roles = "CLIENT, FREELANCER")] + [HttpPut("tasks/{id}")] + public async Task UpdateTaskStatusAsync(int id, [FromBody] TaskStatusDto taskStatusDto) + { + var task = await mainAppContext.Tasks.FindAsync(id); + if (task == null) + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "404", Message = "Task not found." } + } + }; + return NotFound(errorResponse); + } + + var validStatuses = new List { "to-do", "in-progress", "in-review", "done" }; + + if (!validStatuses.Contains(taskStatusDto.NewStatus.ToLower())) + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "400", Message = "Invalid status provided." } + } + }; + return BadRequest(errorResponse); + } + + if (task.Status.ToLower() == "to do" && taskStatusDto.NewStatus.ToLower() != "in progress") + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "400", Message = "Invalid status transition from 'To Do'." } + } + }; + return BadRequest(errorResponse); + } + if (task.Status.ToLower() == "in progress" && + taskStatusDto.NewStatus.ToLower() != "in review" && taskStatusDto.NewStatus.ToLower() != "done") + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "400", Message = "Invalid status transition from 'In Progress'." } + } + }; + return BadRequest(errorResponse); + } + if (task.Status.ToLower() == "in review" && taskStatusDto.NewStatus.ToLower() != "done") + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "400", Message = "Invalid status transition from 'In Review'." } + } + }; + return BadRequest(errorResponse); + } + if (task.Status.ToLower() == "done") + { + var errorResponse = new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List + { + new Error { Code = "400", Message = "No further status transitions allowed from 'Done'." } + } + }; + return BadRequest(errorResponse); + } + + task.Status = taskStatusDto.NewStatus; + + task.CompletedAt = taskStatusDto.NewStatus.ToLower() == "done" ? DateTime.UtcNow : (DateTime?)null; + + await mainAppContext.SaveChangesAsync(); + + var successResponse = new ApiResponse + { + IsSuccess = true, + Results = "Task status updated.", + Errors = null + }; + return Ok(successResponse); + } + + + [Authorize(Roles = "CLIENT")] + [HttpPost("{id}/upload-image")] + public async Task UploadProjectImage(int id, IFormFile file) + { + if (file == null || file.Length == 0) + { + return BadRequest(new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "400", Message = "No file uploaded." } } + }); + } + + var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" }; + var extension = Path.GetExtension(file.FileName).ToLower(); + if (!allowedExtensions.Contains(extension)) + { + return BadRequest(new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "400", Message = "Invalid file type. Only image files are allowed." } } + }); + } + + if (file.Length > 5 * 1024 * 1024) + { + return BadRequest(new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "400", Message = "File size exceeds the 5 MB limit." } } + }); + } + + // Define the file path to save the image (e.g., in wwwroot/images) + var uploadPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "images"); + if (!Directory.Exists(uploadPath)) + { + Directory.CreateDirectory(uploadPath); + } + + // Generate a unique file name + var fileName = Guid.NewGuid().ToString() + extension; + var filePath = Path.Combine(uploadPath, fileName); + + // Save the image to the server + using (var stream = new FileStream(filePath, FileMode.Create)) + { + await file.CopyToAsync(stream); + } + + // Save the file metadata to the database + var project = await mainAppContext.Projects.FindAsync(id); + if (project == null) + { + return NotFound(new ApiResponse + { + IsSuccess = false, + Results = null, + Errors = new List { new Error { Code = "404", Message = "Project not found." } } + }); + } + + // Save the image path or filename to the project model + project.ImagePath = $"/images/{fileName}"; + await mainAppContext.SaveChangesAsync(); + + // Return a success response with the image URL or file path + return Ok(new ApiResponse + { + IsSuccess = true, + Results = $"/images/{fileName}", + Errors = null + }); + } + //[HttpGet("{id}")] //public IActionResult GetProject(int id) //{ diff --git a/Migrations/20241113064604_otpToTempUser.Designer.cs b/Migrations/20241113064604_otpToTempUser.Designer.cs deleted file mode 100644 index 2ed3d21..0000000 --- a/Migrations/20241113064604_otpToTempUser.Designer.cs +++ /dev/null @@ -1,466 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241113064604_otpToTempUser")] - partial class otpToTempUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Budget") - .HasColumnType("TEXT"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("FreelancerId") - .HasColumnType("INTEGER"); - - b.Property("PriceType") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProgressStatus") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Qualification") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Status") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("FreelancerId"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("AonFreelancing.Models.TempUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("TempUser", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.TempUser", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") - .WithMany() - .HasForeignKey("FreelancerId"); - - b.Navigation("Client"); - - b.Navigation("Freelancer"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241113064604_otpToTempUser.cs b/Migrations/20241113064604_otpToTempUser.cs deleted file mode 100644 index b2821c8..0000000 --- a/Migrations/20241113064604_otpToTempUser.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class otpToTempUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_otps_AspNetUsers_PhoneNumber", - table: "otps"); - - migrationBuilder.DropUniqueConstraint( - name: "AK_AspNetUsers_PhoneNumber", - table: "AspNetUsers"); - - migrationBuilder.AlterColumn( - name: "PhoneNumber", - table: "AspNetUsers", - type: "TEXT", - nullable: true, - oldClrType: typeof(string), - oldType: "TEXT"); - - migrationBuilder.AddUniqueConstraint( - name: "AK_TempUser_PhoneNumber", - table: "TempUser", - column: "PhoneNumber"); - - migrationBuilder.AddForeignKey( - name: "FK_otps_TempUser_PhoneNumber", - table: "otps", - column: "PhoneNumber", - principalTable: "TempUser", - principalColumn: "PhoneNumber", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_otps_TempUser_PhoneNumber", - table: "otps"); - - migrationBuilder.DropUniqueConstraint( - name: "AK_TempUser_PhoneNumber", - table: "TempUser"); - - migrationBuilder.AlterColumn( - name: "PhoneNumber", - table: "AspNetUsers", - type: "TEXT", - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "TEXT", - oldNullable: true); - - migrationBuilder.AddUniqueConstraint( - name: "AK_AspNetUsers_PhoneNumber", - table: "AspNetUsers", - column: "PhoneNumber"); - - migrationBuilder.AddForeignKey( - name: "FK_otps_AspNetUsers_PhoneNumber", - table: "otps", - column: "PhoneNumber", - principalTable: "AspNetUsers", - principalColumn: "PhoneNumber", - onDelete: ReferentialAction.Cascade); - } - } -} diff --git a/Migrations/20241114060939_projectMirgation.Designer.cs b/Migrations/20241114060939_projectMirgation.Designer.cs deleted file mode 100644 index b6f586b..0000000 --- a/Migrations/20241114060939_projectMirgation.Designer.cs +++ /dev/null @@ -1,483 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241114060939_projectMirgation")] - partial class projectMirgation - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Budget") - .HasColumnType("TEXT"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("INTEGER"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("FreelancerId") - .HasColumnType("INTEGER"); - - b.Property("PriceType") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("QualificationName") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("StartDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Available"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("FreelancerId"); - - b.ToTable("Projects", null, t => - { - t.HasCheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); - - t.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); - - t.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.TempUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("TempUser", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("About") - .HasColumnType("TEXT"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.TempUser", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") - .WithMany() - .HasForeignKey("FreelancerId"); - - b.Navigation("Client"); - - b.Navigation("Freelancer"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241114060939_projectMirgation.cs b/Migrations/20241114060939_projectMirgation.cs deleted file mode 100644 index 64cbdc7..0000000 --- a/Migrations/20241114060939_projectMirgation.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class projectMirgation : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "ProgressStatus", - table: "Projects"); - - migrationBuilder.RenameColumn( - name: "Qualification", - table: "Projects", - newName: "QualificationName"); - - migrationBuilder.AlterColumn( - name: "Status", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: "Available", - oldClrType: typeof(string), - oldType: "TEXT"); - - migrationBuilder.AddColumn( - name: "Duration", - table: "Projects", - type: "INTEGER", - nullable: false, - defaultValue: 0); - - migrationBuilder.AddColumn( - name: "EndDate", - table: "Projects", - type: "TEXT", - nullable: true); - - migrationBuilder.AddColumn( - name: "StartDate", - table: "Projects", - type: "TEXT", - nullable: true); - - migrationBuilder.AddColumn( - name: "About", - table: "AspNetUsers", - type: "TEXT", - nullable: true); - - migrationBuilder.AddCheckConstraint( - name: "CK_PRICE_TYPE", - table: "Projects", - sql: "[PriceType] IN ('Fixed', 'PerHour')"); - - migrationBuilder.AddCheckConstraint( - name: "CK_QUALIFICATION_NAME", - table: "Projects", - sql: "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); - - migrationBuilder.AddCheckConstraint( - name: "CK_STATUS", - table: "Projects", - sql: "[Status] IN ('Available', 'Closed')"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropCheckConstraint( - name: "CK_PRICE_TYPE", - table: "Projects"); - - migrationBuilder.DropCheckConstraint( - name: "CK_QUALIFICATION_NAME", - table: "Projects"); - - migrationBuilder.DropCheckConstraint( - name: "CK_STATUS", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "Duration", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "EndDate", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "StartDate", - table: "Projects"); - - migrationBuilder.DropColumn( - name: "About", - table: "AspNetUsers"); - - migrationBuilder.RenameColumn( - name: "QualificationName", - table: "Projects", - newName: "Qualification"); - - migrationBuilder.AlterColumn( - name: "Status", - table: "Projects", - type: "TEXT", - nullable: false, - oldClrType: typeof(string), - oldType: "TEXT", - oldDefaultValue: "Available"); - - migrationBuilder.AddColumn( - name: "ProgressStatus", - table: "Projects", - type: "TEXT", - nullable: false, - defaultValue: ""); - } - } -} diff --git a/Migrations/20241114072136_reomvedUserTypeColumn.Designer.cs b/Migrations/20241114072136_reomvedUserTypeColumn.Designer.cs deleted file mode 100644 index a62f938..0000000 --- a/Migrations/20241114072136_reomvedUserTypeColumn.Designer.cs +++ /dev/null @@ -1,483 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241114072136_reomvedUserTypeColumn")] - partial class reomvedUserTypeColumn - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Budget") - .HasColumnType("TEXT"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("INTEGER"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("FreelancerId") - .HasColumnType("INTEGER"); - - b.Property("PriceType") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("QualificationName") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("StartDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Available"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("FreelancerId"); - - b.ToTable("Projects", null, t => - { - t.HasCheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); - - t.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); - - t.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.TempUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("TempUser", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("About") - .HasColumnType("TEXT"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.TempUser", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") - .WithMany() - .HasForeignKey("FreelancerId"); - - b.Navigation("Client"); - - b.Navigation("Freelancer"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241114072136_reomvedUserTypeColumn.cs b/Migrations/20241114072136_reomvedUserTypeColumn.cs deleted file mode 100644 index a31108d..0000000 --- a/Migrations/20241114072136_reomvedUserTypeColumn.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class reomvedUserTypeColumn : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "UserType", - table: "AspNetUsers"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "UserType", - table: "AspNetUsers", - type: "TEXT", - nullable: true); - } - } -} diff --git a/Migrations/20241114113925_projectsTableMigration.Designer.cs b/Migrations/20241114113925_projectsTableMigration.Designer.cs deleted file mode 100644 index f8e79b9..0000000 --- a/Migrations/20241114113925_projectsTableMigration.Designer.cs +++ /dev/null @@ -1,483 +0,0 @@ -// -using System; -using AonFreelancing.Contexts; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - [DbContext(typeof(MainAppContext))] - [Migration("20241114113925_projectsTableMigration")] - partial class projectsTableMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.10"); - - modelBuilder.Entity("AonFreelancing.Models.ApplicationRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("Code") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("CreatedDate") - .HasColumnType("TEXT"); - - b.Property("ExpiresAt") - .HasColumnType("TEXT"); - - b.Property("IsUsed") - .HasColumnType("INTEGER"); - - b.HasKey("PhoneNumber"); - - b.ToTable("otps", null, t => - { - t.HasCheckConstraint("CK_CODE", "length([Code]) = 6"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("Budget") - .HasColumnType("TEXT"); - - b.Property("ClientId") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Duration") - .HasColumnType("INTEGER"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("FreelancerId") - .HasColumnType("INTEGER"); - - b.Property("PriceType") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("QualificationName") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("StartDate") - .HasColumnType("TEXT"); - - b.Property("Status") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Available"); - - b.Property("Title") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("FreelancerId"); - - b.ToTable("Projects", null, t => - { - t.HasCheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); - - t.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); - - t.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); - }); - }); - - modelBuilder.Entity("AonFreelancing.Models.TempUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("PhoneNumber") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("TempUser", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("About") - .HasColumnType("TEXT"); - - b.Property("AccessFailedCount") - .HasColumnType("INTEGER"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("TEXT"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("EmailConfirmed") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnabled") - .HasColumnType("INTEGER"); - - b.Property("LockoutEnd") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.Property("PasswordHash") - .HasColumnType("TEXT"); - - b.Property("PhoneNumber") - .HasColumnType("TEXT"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("INTEGER"); - - b.Property("SecurityStamp") - .HasColumnType("TEXT"); - - b.Property("TwoFactorEnabled") - .HasColumnType("INTEGER"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("PhoneNumber") - .IsUnique(); - - b.ToTable("AspNetUsers", (string)null); - - b.UseTptMappingStrategy(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER"); - - b.Property("ClaimType") - .HasColumnType("TEXT"); - - b.Property("ClaimValue") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("ProviderKey") - .HasColumnType("TEXT"); - - b.Property("ProviderDisplayName") - .HasColumnType("TEXT"); - - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("RoleId") - .HasColumnType("INTEGER"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("INTEGER"); - - b.Property("LoginProvider") - .HasColumnType("TEXT"); - - b.Property("Name") - .HasColumnType("TEXT"); - - b.Property("Value") - .HasColumnType("TEXT"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("CompanyName") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Clients", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Skills") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("Freelancers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasBaseType("AonFreelancing.Models.User"); - - b.Property("Permissions") - .IsRequired() - .HasColumnType("TEXT"); - - b.ToTable("SystemUsers", (string)null); - }); - - modelBuilder.Entity("AonFreelancing.Models.OTP", b => - { - b.HasOne("AonFreelancing.Models.TempUser", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Project", b => - { - b.HasOne("AonFreelancing.Models.Client", "Client") - .WithMany("Projects") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") - .WithMany() - .HasForeignKey("FreelancerId"); - - b.Navigation("Client"); - - b.Navigation("Freelancer"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("AonFreelancing.Models.ApplicationRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Client", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.Freelancer", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => - { - b.HasOne("AonFreelancing.Models.User", null) - .WithOne() - .HasForeignKey("AonFreelancing.Models.SystemUser", "Id") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("AonFreelancing.Models.Client", b => - { - b.Navigation("Projects"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241114113925_projectsTableMigration.cs b/Migrations/20241114113925_projectsTableMigration.cs deleted file mode 100644 index ebd0f69..0000000 --- a/Migrations/20241114113925_projectsTableMigration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace AonFreelancing.Migrations -{ - /// - public partial class projectsTableMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs index 37aa6f2..2d0fba8 100644 --- a/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs +++ b/Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs @@ -11,6 +11,10 @@ namespace AonFreelancing.Migrations { [DbContext(typeof(MainAppContext))] +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs + [Migration("20241120182112_UploadFileMig")] + partial class UploadFileMig +======== <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs [Migration("20241114201856_Cr1Cr2Cr3Cr4Mig")] partial class Cr1Cr2Cr3Cr4Mig @@ -18,6 +22,7 @@ partial class Cr1Cr2Cr3Cr4Mig [Migration("20241113063403_InitialMigration")] partial class InitialMigration >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -52,6 +57,54 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("AspNetRoles", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ApprovedAt") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("INTEGER"); + + b.Property("FreelancerId") + .HasColumnType("INTEGER"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("ProposedPrice") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubmittedAt") + .HasColumnType("TEXT"); + + b.Property("SystemUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("FreelancerId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("SystemUserId"); + + b.ToTable("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.Property("PhoneNumber") @@ -100,11 +153,21 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("Duration") .HasColumnType("INTEGER"); +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs + b.Property("EndDate") + .HasColumnType("TEXT"); + +======== ======== >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("FreelancerId") .HasColumnType("INTEGER"); + b.Property("ImagePath") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("PriceType") .IsRequired() .HasColumnType("TEXT"); @@ -125,6 +188,15 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); + b.Property("StartDate") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Available"); + b.Property("Title") .IsRequired() .HasColumnType("TEXT"); @@ -135,7 +207,69 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasIndex("FreelancerId"); - b.ToTable("Projects"); + b.ToTable("Projects", null, t => + { + t.HasCheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); + + t.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); + + t.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); + }); + }); + + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("DeadlineAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("Tasks"); + }); + + modelBuilder.Entity("AonFreelancing.Models.TempUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("PhoneNumber") + .IsUnique(); + + b.ToTable("TempUser", (string)null); }); <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs @@ -193,7 +327,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("INTEGER"); b.Property("About") +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs +======== .IsRequired() +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs .HasColumnType("TEXT"); b.Property("AccessFailedCount") @@ -232,7 +369,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("TEXT"); b.Property("PhoneNumber") - .IsRequired() .HasColumnType("TEXT"); b.Property("PhoneNumberConfirmed") @@ -413,12 +549,39 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("SystemUsers", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.HasOne("AonFreelancing.Models.Client", null) + .WithMany("Bids") + .HasForeignKey("ClientId"); + + b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") + .WithMany("Bids") + .HasForeignKey("FreelancerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany("Bids") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.SystemUser", null) + .WithMany("Bids") + .HasForeignKey("SystemUserId"); + + b.Navigation("Freelancer"); + + b.Navigation("Project"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { - b.HasOne("AonFreelancing.Models.User", null) + b.HasOne("AonFreelancing.Models.TempUser", null) .WithOne() .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.User", "PhoneNumber") + .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); @@ -440,6 +603,17 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Navigation("Freelancer"); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("AonFreelancing.Models.ApplicationRole", null) @@ -518,10 +692,27 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("AonFreelancing.Models.Project", b => + { + b.Navigation("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.Client", b => { + b.Navigation("Bids"); + b.Navigation("Projects"); }); + + modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => + { + b.Navigation("Bids"); + }); + + modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => + { + b.Navigation("Bids"); + }); #pragma warning restore 612, 618 } } diff --git a/Migrations/20241113063403_InitialMigration.Designer.cs b/Migrations/20241120160202_TasksMig.Designer.cs similarity index 74% rename from Migrations/20241113063403_InitialMigration.Designer.cs rename to Migrations/20241120160202_TasksMig.Designer.cs index 37aa6f2..134eaca 100644 --- a/Migrations/20241113063403_InitialMigration.Designer.cs +++ b/Migrations/20241120160202_TasksMig.Designer.cs @@ -11,6 +11,10 @@ namespace AonFreelancing.Migrations { [DbContext(typeof(MainAppContext))] +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.Designer.cs + [Migration("20241120160202_TasksMig")] + partial class TasksMig +======= <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs [Migration("20241114201856_Cr1Cr2Cr3Cr4Mig")] partial class Cr1Cr2Cr3Cr4Mig @@ -18,6 +22,7 @@ partial class Cr1Cr2Cr3Cr4Mig [Migration("20241113063403_InitialMigration")] partial class InitialMigration >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.Designer.cs { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -52,6 +57,54 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("AspNetRoles", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ApprovedAt") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("INTEGER"); + + b.Property("FreelancerId") + .HasColumnType("INTEGER"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("ProposedPrice") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubmittedAt") + .HasColumnType("TEXT"); + + b.Property("SystemUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("FreelancerId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("SystemUserId"); + + b.ToTable("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.Property("PhoneNumber") @@ -96,12 +149,21 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.Designer.cs + b.Property("Duration") + .HasColumnType("INTEGER"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + +======= <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("Duration") .HasColumnType("INTEGER"); ======== >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.Designer.cs b.Property("FreelancerId") .HasColumnType("INTEGER"); @@ -109,6 +171,13 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.Designer.cs + b.Property("QualificationName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("StartDate") +======= <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("QualificationName") ======== @@ -119,11 +188,14 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("Qualification") >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs .IsRequired() +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.Designer.cs .HasColumnType("TEXT"); b.Property("Status") .IsRequired() - .HasColumnType("TEXT"); + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Available"); b.Property("Title") .IsRequired() @@ -135,7 +207,48 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasIndex("FreelancerId"); - b.ToTable("Projects"); + b.ToTable("Projects", null, t => + { + t.HasCheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); + + t.HasCheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); + + t.HasCheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); + }); + }); + + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("DeadlineAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("Tasks"); }); <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs @@ -193,7 +306,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("INTEGER"); b.Property("About") +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.Designer.cs +======= .IsRequired() +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.Designer.cs .HasColumnType("TEXT"); b.Property("AccessFailedCount") @@ -232,7 +348,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("TEXT"); b.Property("PhoneNumber") - .IsRequired() .HasColumnType("TEXT"); b.Property("PhoneNumberConfirmed") @@ -413,12 +528,39 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("SystemUsers", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.HasOne("AonFreelancing.Models.Client", null) + .WithMany("Bids") + .HasForeignKey("ClientId"); + + b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") + .WithMany("Bids") + .HasForeignKey("FreelancerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany("Bids") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.SystemUser", null) + .WithMany("Bids") + .HasForeignKey("SystemUserId"); + + b.Navigation("Freelancer"); + + b.Navigation("Project"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { - b.HasOne("AonFreelancing.Models.User", null) + b.HasOne("AonFreelancing.Models.TempUser", null) .WithOne() .HasForeignKey("AonFreelancing.Models.OTP", "PhoneNumber") - .HasPrincipalKey("AonFreelancing.Models.User", "PhoneNumber") + .HasPrincipalKey("AonFreelancing.Models.TempUser", "PhoneNumber") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); @@ -440,6 +582,17 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Navigation("Freelancer"); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("AonFreelancing.Models.ApplicationRole", null) @@ -518,10 +671,27 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("AonFreelancing.Models.Project", b => + { + b.Navigation("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.Client", b => { + b.Navigation("Bids"); + b.Navigation("Projects"); }); + + modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => + { + b.Navigation("Bids"); + }); + + modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => + { + b.Navigation("Bids"); + }); #pragma warning restore 612, 618 } } diff --git a/Migrations/20241113063403_InitialMigration.cs b/Migrations/20241120160202_TasksMig.cs similarity index 73% rename from Migrations/20241113063403_InitialMigration.cs rename to Migrations/20241120160202_TasksMig.cs index c83f319..76b51dd 100644 --- a/Migrations/20241113063403_InitialMigration.cs +++ b/Migrations/20241120160202_TasksMig.cs @@ -6,11 +6,15 @@ namespace AonFreelancing.Migrations { /// +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.cs + public partial class TasksMig : Migration +======= <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs public partial class Cr1Cr2Cr3Cr4Mig : Migration ======== public partial class InitialMigration : Migration >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.cs +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.cs { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -37,7 +41,11 @@ protected override void Up(MigrationBuilder migrationBuilder) Id = table.Column(type: "INTEGER", nullable: false) .Annotation("Sqlite:Autoincrement", true), Name = table.Column(type: "TEXT", nullable: false), +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.cs + About = table.Column(type: "TEXT", nullable: true), +======= About = table.Column(type: "TEXT", nullable: false), +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.cs UserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), NormalizedUserName = table.Column(type: "TEXT", maxLength: 256, nullable: true), Email = table.Column(type: "TEXT", maxLength: 256, nullable: true), @@ -46,7 +54,7 @@ protected override void Up(MigrationBuilder migrationBuilder) PasswordHash = table.Column(type: "TEXT", nullable: true), SecurityStamp = table.Column(type: "TEXT", nullable: true), ConcurrencyStamp = table.Column(type: "TEXT", nullable: true), - PhoneNumber = table.Column(type: "TEXT", nullable: false), + PhoneNumber = table.Column(type: "TEXT", nullable: true), PhoneNumberConfirmed = table.Column(type: "INTEGER", nullable: false), TwoFactorEnabled = table.Column(type: "INTEGER", nullable: false), LockoutEnd = table.Column(type: "TEXT", nullable: true), @@ -56,7 +64,6 @@ protected override void Up(MigrationBuilder migrationBuilder) constraints: table => { table.PrimaryKey("PK_AspNetUsers", x => x.Id); - table.UniqueConstraint("AK_AspNetUsers_PhoneNumber", x => x.PhoneNumber); }); migrationBuilder.CreateTable( @@ -100,7 +107,11 @@ protected override void Up(MigrationBuilder migrationBuilder) constraints: table => { table.PrimaryKey("PK_TempUser", x => x.Id); +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.cs + table.UniqueConstraint("AK_TempUser_PhoneNumber", x => x.PhoneNumber); +======= >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.cs +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.cs }); migrationBuilder.CreateTable( @@ -248,6 +259,8 @@ protected override void Up(MigrationBuilder migrationBuilder) }); migrationBuilder.CreateTable( +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.cs +======= name: "otps", columns: table => new { @@ -277,6 +290,7 @@ protected override void Up(MigrationBuilder migrationBuilder) }); migrationBuilder.CreateTable( +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.cs name: "SystemUsers", columns: table => new { @@ -295,6 +309,28 @@ protected override void Up(MigrationBuilder migrationBuilder) onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "otps", + columns: table => new + { + PhoneNumber = table.Column(type: "TEXT", nullable: false), + Code = table.Column(type: "TEXT", nullable: false), + CreatedDate = table.Column(type: "TEXT", nullable: false), + ExpiresAt = table.Column(type: "TEXT", nullable: false), + IsUsed = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_otps", x => x.PhoneNumber); + table.CheckConstraint("CK_CODE", "length([Code]) = 6"); + table.ForeignKey( + name: "FK_otps_TempUser_PhoneNumber", + column: x => x.PhoneNumber, + principalTable: "TempUser", + principalColumn: "PhoneNumber", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "Projects", columns: table => new @@ -305,7 +341,16 @@ protected override void Up(MigrationBuilder migrationBuilder) Description = table.Column(type: "TEXT", nullable: false), ClientId = table.Column(type: "INTEGER", nullable: false), CreatedAt = table.Column(type: "TEXT", nullable: false), + StartDate = table.Column(type: "TEXT", nullable: true), + EndDate = table.Column(type: "TEXT", nullable: true), PriceType = table.Column(type: "TEXT", nullable: false), +<<<<<<< HEAD:Migrations/20241120160202_TasksMig.cs + Duration = table.Column(type: "INTEGER", nullable: false), + Budget = table.Column(type: "TEXT", nullable: false), + QualificationName = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "TEXT", nullable: false, defaultValue: "Available"), + FreelancerId = table.Column(type: "INTEGER", nullable: true) +======= <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs Duration = table.Column(type: "INTEGER", nullable: false), QualificationName = table.Column(type: "TEXT", nullable: false), @@ -319,10 +364,14 @@ protected override void Up(MigrationBuilder migrationBuilder) Status = table.Column(type: "TEXT", nullable: false), ProgressStatus = table.Column(type: "TEXT", nullable: false) >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.cs +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241113063403_InitialMigration.cs }, constraints: table => { table.PrimaryKey("PK_Projects", x => x.Id); + table.CheckConstraint("CK_PRICE_TYPE", "[PriceType] IN ('Fixed', 'PerHour')"); + table.CheckConstraint("CK_QUALIFICATION_NAME", "[QualificationName] IN ('uiux', 'frontend', 'mobile', 'backend', 'fullstack')"); + table.CheckConstraint("CK_STATUS", "[Status] IN ('Available', 'Closed')"); table.ForeignKey( name: "FK_Projects_Clients_ClientId", column: x => x.ClientId, @@ -336,6 +385,73 @@ protected override void Up(MigrationBuilder migrationBuilder) principalColumn: "Id"); }); + migrationBuilder.CreateTable( + name: "Bids", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + ProjectId = table.Column(type: "INTEGER", nullable: false), + FreelancerId = table.Column(type: "INTEGER", nullable: false), + ProposedPrice = table.Column(type: "TEXT", nullable: false), + Notes = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "TEXT", nullable: false), + SubmittedAt = table.Column(type: "TEXT", nullable: false), + ApprovedAt = table.Column(type: "TEXT", nullable: true), + ClientId = table.Column(type: "INTEGER", nullable: true), + SystemUserId = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Bids", x => x.Id); + table.ForeignKey( + name: "FK_Bids_Clients_ClientId", + column: x => x.ClientId, + principalTable: "Clients", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Bids_Freelancers_FreelancerId", + column: x => x.FreelancerId, + principalTable: "Freelancers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Bids_Projects_ProjectId", + column: x => x.ProjectId, + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Bids_SystemUsers_SystemUserId", + column: x => x.SystemUserId, + principalTable: "SystemUsers", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "Tasks", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + ProjectId = table.Column(type: "INTEGER", nullable: false), + Name = table.Column(type: "TEXT", nullable: false), + Status = table.Column(type: "TEXT", nullable: false), + DeadlineAt = table.Column(type: "TEXT", nullable: true), + CompletedAt = table.Column(type: "TEXT", nullable: true), + Notes = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Tasks", x => x.Id); + table.ForeignKey( + name: "FK_Tasks_Projects_ProjectId", + column: x => x.ProjectId, + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", @@ -379,6 +495,26 @@ protected override void Up(MigrationBuilder migrationBuilder) column: "NormalizedUserName", unique: true); + migrationBuilder.CreateIndex( + name: "IX_Bids_ClientId", + table: "Bids", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_Bids_FreelancerId", + table: "Bids", + column: "FreelancerId"); + + migrationBuilder.CreateIndex( + name: "IX_Bids_ProjectId", + table: "Bids", + column: "ProjectId"); + + migrationBuilder.CreateIndex( + name: "IX_Bids_SystemUserId", + table: "Bids", + column: "SystemUserId"); + migrationBuilder.CreateIndex( name: "IX_Projects_ClientId", table: "Projects", @@ -391,6 +527,11 @@ protected override void Up(MigrationBuilder migrationBuilder) <<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.cs ======== + migrationBuilder.CreateIndex( + name: "IX_Tasks_ProjectId", + table: "Tasks", + column: "ProjectId"); + migrationBuilder.CreateIndex( name: "IX_TempUser_PhoneNumber", table: "TempUser", @@ -417,11 +558,17 @@ protected override void Down(MigrationBuilder migrationBuilder) migrationBuilder.DropTable( name: "AspNetUserTokens"); + migrationBuilder.DropTable( + name: "Bids"); + migrationBuilder.DropTable( name: "otps"); migrationBuilder.DropTable( - name: "Projects"); + name: "Tasks"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); migrationBuilder.DropTable( name: "SystemUsers"); @@ -437,7 +584,7 @@ protected override void Down(MigrationBuilder migrationBuilder) >>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.cs migrationBuilder.DropTable( - name: "AspNetRoles"); + name: "Projects"); migrationBuilder.DropTable( name: "Clients"); diff --git a/Migrations/20241114063948_userTypeToUserTable.Designer.cs b/Migrations/20241120182112_UploadFileMig.Designer.cs similarity index 66% rename from Migrations/20241114063948_userTypeToUserTable.Designer.cs rename to Migrations/20241120182112_UploadFileMig.Designer.cs index 33925b8..2d0fba8 100644 --- a/Migrations/20241114063948_userTypeToUserTable.Designer.cs +++ b/Migrations/20241120182112_UploadFileMig.Designer.cs @@ -11,8 +11,18 @@ namespace AonFreelancing.Migrations { [DbContext(typeof(MainAppContext))] - [Migration("20241114063948_userTypeToUserTable")] - partial class userTypeToUserTable +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs + [Migration("20241120182112_UploadFileMig")] + partial class UploadFileMig +======== +<<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs + [Migration("20241114201856_Cr1Cr2Cr3Cr4Mig")] + partial class Cr1Cr2Cr3Cr4Mig +======== + [Migration("20241113063403_InitialMigration")] + partial class InitialMigration +>>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -47,22 +57,69 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("AspNetRoles", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ApprovedAt") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("INTEGER"); + + b.Property("FreelancerId") + .HasColumnType("INTEGER"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("ProposedPrice") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubmittedAt") + .HasColumnType("TEXT"); + + b.Property("SystemUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("FreelancerId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("SystemUserId"); + + b.ToTable("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.Property("PhoneNumber") .HasColumnType("TEXT"); b.Property("Code") - .IsRequired() .HasColumnType("TEXT"); - b.Property("CreatedDate") + b.Property("CreatedDate") .HasColumnType("TEXT"); - b.Property("ExpiresAt") + b.Property("ExpiresAt") .HasColumnType("TEXT"); - b.Property("IsUsed") + b.Property("IsUsed") .HasColumnType("INTEGER"); b.HasKey("PhoneNumber"); @@ -92,20 +149,42 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired() .HasColumnType("TEXT"); +<<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("Duration") .HasColumnType("INTEGER"); +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs b.Property("EndDate") .HasColumnType("TEXT"); +======== +======== +>>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("FreelancerId") .HasColumnType("INTEGER"); + b.Property("ImagePath") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("PriceType") .IsRequired() .HasColumnType("TEXT"); +<<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs b.Property("QualificationName") +======== + b.Property("ProgressStatus") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Qualification") +>>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Status") .IsRequired() .HasColumnType("TEXT"); @@ -138,16 +217,97 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) }); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("DeadlineAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("Tasks"); + }); + + modelBuilder.Entity("AonFreelancing.Models.TempUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("PhoneNumber") + .IsUnique(); + + b.ToTable("TempUser", (string)null); + }); + +<<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs + modelBuilder.Entity("AonFreelancing.Models.TempOTP", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Code") + .HasColumnType("TEXT"); + + b.Property("CreatedDate") + .HasColumnType("TEXT"); + + b.Property("ExpiresAt") + .HasColumnType("TEXT"); + + b.Property("IsUsed") + .HasColumnType("INTEGER"); + +======== modelBuilder.Entity("AonFreelancing.Models.TempUser", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("INTEGER"); +>>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs b.Property("PhoneNumber") .IsRequired() .HasColumnType("TEXT"); +<<<<<<<< HEAD:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs + b.HasKey("ID"); + + b.ToTable("TempOtps"); +======== b.Property("PhoneNumberConfirmed") .HasColumnType("INTEGER"); @@ -157,6 +317,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsUnique(); b.ToTable("TempUser", (string)null); +>>>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2:Migrations/20241113063403_InitialMigration.Designer.cs }); modelBuilder.Entity("AonFreelancing.Models.User", b => @@ -166,6 +327,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("INTEGER"); b.Property("About") +<<<<<<<< HEAD:Migrations/20241120182112_UploadFileMig.Designer.cs +======== + .IsRequired() +>>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5:Migrations/20241114201856_Cr1Cr2Cr3Cr4Mig.Designer.cs .HasColumnType("TEXT"); b.Property("AccessFailedCount") @@ -219,9 +384,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasMaxLength(256) .HasColumnType("TEXT"); - b.Property("UserType") - .HasColumnType("TEXT"); - b.HasKey("Id"); b.HasIndex("NormalizedEmail") @@ -239,6 +401,22 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.UseTptMappingStrategy(); }); + modelBuilder.Entity("AonFreelancing.Models.UsersTemp", b => + { + b.Property("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property("IsVerfied") + .HasColumnType("INTEGER"); + + b.Property("VerifyTime") + .HasColumnType("TEXT"); + + b.HasKey("PhoneNumber"); + + b.ToTable("UsersTemps", (string)null); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.Property("Id") @@ -371,6 +549,33 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("SystemUsers", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.HasOne("AonFreelancing.Models.Client", null) + .WithMany("Bids") + .HasForeignKey("ClientId"); + + b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") + .WithMany("Bids") + .HasForeignKey("FreelancerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany("Bids") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.SystemUser", null) + .WithMany("Bids") + .HasForeignKey("SystemUserId"); + + b.Navigation("Freelancer"); + + b.Navigation("Project"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.HasOne("AonFreelancing.Models.TempUser", null) @@ -398,6 +603,17 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Navigation("Freelancer"); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("AonFreelancing.Models.ApplicationRole", null) @@ -476,10 +692,27 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("AonFreelancing.Models.Project", b => + { + b.Navigation("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.Client", b => { + b.Navigation("Bids"); + b.Navigation("Projects"); }); + + modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => + { + b.Navigation("Bids"); + }); + + modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => + { + b.Navigation("Bids"); + }); #pragma warning restore 612, 618 } } diff --git a/Migrations/20241114063948_userTypeToUserTable.cs b/Migrations/20241120182112_UploadFileMig.cs similarity index 65% rename from Migrations/20241114063948_userTypeToUserTable.cs rename to Migrations/20241120182112_UploadFileMig.cs index 5fe0f53..559f947 100644 --- a/Migrations/20241114063948_userTypeToUserTable.cs +++ b/Migrations/20241120182112_UploadFileMig.cs @@ -5,24 +5,25 @@ namespace AonFreelancing.Migrations { /// - public partial class userTypeToUserTable : Migration + public partial class UploadFileMig : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn( - name: "UserType", - table: "AspNetUsers", + name: "ImagePath", + table: "Projects", type: "TEXT", - nullable: true); + nullable: false, + defaultValue: ""); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( - name: "UserType", - table: "AspNetUsers"); + name: "ImagePath", + table: "Projects"); } } } diff --git a/Migrations/MainAppContextModelSnapshot.cs b/Migrations/MainAppContextModelSnapshot.cs index f547257..1d4a3b0 100644 --- a/Migrations/MainAppContextModelSnapshot.cs +++ b/Migrations/MainAppContextModelSnapshot.cs @@ -44,6 +44,54 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("AspNetRoles", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ApprovedAt") + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasColumnType("INTEGER"); + + b.Property("FreelancerId") + .HasColumnType("INTEGER"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("ProposedPrice") + .HasColumnType("TEXT"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("SubmittedAt") + .HasColumnType("TEXT"); + + b.Property("SystemUserId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("FreelancerId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("SystemUserId"); + + b.ToTable("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.Property("PhoneNumber") @@ -100,6 +148,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("FreelancerId") .HasColumnType("INTEGER"); + b.Property("ImagePath") + .IsRequired() + .HasColumnType("TEXT"); + b.Property("PriceType") .IsRequired() .HasColumnType("TEXT"); @@ -144,6 +196,40 @@ protected override void BuildModel(ModelBuilder modelBuilder) }); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CompletedAt") + .HasColumnType("TEXT"); + + b.Property("DeadlineAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Notes") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("INTEGER"); + + b.Property("Status") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("Tasks"); + }); + modelBuilder.Entity("AonFreelancing.Models.TempUser", b => { b.Property("Id") @@ -421,6 +507,33 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("SystemUsers", (string)null); }); + modelBuilder.Entity("AonFreelancing.Models.Bid", b => + { + b.HasOne("AonFreelancing.Models.Client", null) + .WithMany("Bids") + .HasForeignKey("ClientId"); + + b.HasOne("AonFreelancing.Models.Freelancer", "Freelancer") + .WithMany("Bids") + .HasForeignKey("FreelancerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany("Bids") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AonFreelancing.Models.SystemUser", null) + .WithMany("Bids") + .HasForeignKey("SystemUserId"); + + b.Navigation("Freelancer"); + + b.Navigation("Project"); + }); + modelBuilder.Entity("AonFreelancing.Models.OTP", b => { b.HasOne("AonFreelancing.Models.TempUser", null) @@ -448,6 +561,17 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Freelancer"); }); + modelBuilder.Entity("AonFreelancing.Models.Tasks", b => + { + b.HasOne("AonFreelancing.Models.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("AonFreelancing.Models.ApplicationRole", null) @@ -526,10 +650,27 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("AonFreelancing.Models.Project", b => + { + b.Navigation("Bids"); + }); + modelBuilder.Entity("AonFreelancing.Models.Client", b => { + b.Navigation("Bids"); + b.Navigation("Projects"); }); + + modelBuilder.Entity("AonFreelancing.Models.Freelancer", b => + { + b.Navigation("Bids"); + }); + + modelBuilder.Entity("AonFreelancing.Models.SystemUser", b => + { + b.Navigation("Bids"); + }); #pragma warning restore 612, 618 } } diff --git a/Models/Bid.cs b/Models/Bid.cs new file mode 100644 index 0000000..8d48ee9 --- /dev/null +++ b/Models/Bid.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace AonFreelancing.Models +{ + public class Bid + { + public int Id { get; set; } + public int ProjectId { get; set; } + public Project Project { get; set; } + public long FreelancerId { get; set; } + public Freelancer Freelancer { get; set; } + public decimal ProposedPrice { get; set; } + public string Notes { get; set; } + public string Status { get; set; } = "pending"; + public DateTime SubmittedAt { get; set; } = DateTime.Now; + public DateTime? ApprovedAt { get; set; } + } +} diff --git a/Models/DTOs/BidInputDto.cs b/Models/DTOs/BidInputDto.cs new file mode 100644 index 0000000..7731571 --- /dev/null +++ b/Models/DTOs/BidInputDto.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; + +namespace AonFreelancing.Models.DTOs +{ + public class BidInputDto + { + [Required(ErrorMessage = "Proposed price is required.")] + [Range(0.01, double.MaxValue, ErrorMessage = "Proposed price must be greater than 0.")] + public decimal ProposedPrice { get; set; } + + [MaxLength(500, ErrorMessage = "Notes cannot exceed 500 characters.")] + public string? Notes { get; set; } + } +} diff --git a/Models/DTOs/TaskInputDto.cs b/Models/DTOs/TaskInputDto.cs new file mode 100644 index 0000000..98281cb --- /dev/null +++ b/Models/DTOs/TaskInputDto.cs @@ -0,0 +1,15 @@ +namespace AonFreelancing.Models.DTOs +{ + public class TaskInputDto + { + public string Name { get; set; } + public DateTime DeadlineAt { get; set; } + public string Notes { get; set; } + } + + public class TaskStatusDto + { + public string NewStatus { get; set; } + } + +} diff --git a/Models/OTP.cs b/Models/OTP.cs index 97e91e3..925836b 100644 --- a/Models/OTP.cs +++ b/Models/OTP.cs @@ -10,10 +10,10 @@ public class OTP [Key] public string PhoneNumber { get; set; } - public string? Code { get; set; } - public DateTime? CreatedDate { get; set; } - public DateTime? ExpiresAt { get; set; } - public bool? IsUsed { get; set; } + public string Code { get; set; } + public DateTime CreatedDate { get; set; } + public DateTime ExpiresAt { get; set; } + public bool IsUsed { get; set; } } } diff --git a/Models/Project.cs b/Models/Project.cs index 12bebc0..780b373 100644 --- a/Models/Project.cs +++ b/Models/Project.cs @@ -45,6 +45,12 @@ public class Project public long? FreelancerId { get; set; } [ForeignKey("FreelancerId")] public virtual Freelancer? Freelancer { get; set; } +<<<<<<< HEAD + public ICollection Bids { get; set; } = new List(); + public string ImagePath { get; set; } + +======= >>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2 +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5 } } diff --git a/Models/Tasks.cs b/Models/Tasks.cs new file mode 100644 index 0000000..3d685c1 --- /dev/null +++ b/Models/Tasks.cs @@ -0,0 +1,15 @@ +namespace AonFreelancing.Models +{ + public class Tasks + { + public int Id { get; set; } + public int ProjectId { get; set; } + public Project Project { get; set; } + public string Name { get; set; } + public string Status { get; set; } = "To-Do"; + public DateTime? DeadlineAt { get; set; } + public DateTime? CompletedAt { get; set; } + public string Notes { get; set; } + + } +} diff --git a/Models/User.cs b/Models/User.cs index 20559e8..75e7852 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -22,6 +22,12 @@ public class User : IdentityUser public string About { get; set; } ======= public string? About { get; set; } +<<<<<<< HEAD + + public ICollection Bids { get; set; } = new List(); + +======= >>>>>>> bd49e789eca82cf0b70e0aad4d121920d1c2c3b2 +>>>>>>> 7a1bf9d3c70dc397651dcc412af417235d1c26a5 } } diff --git a/Program.cs b/Program.cs index 354592d..1100d66 100644 --- a/Program.cs +++ b/Program.cs @@ -31,7 +31,6 @@ public static void Main(string[] args) builder.Services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); - builder.Configuration.AddJsonFile("appsettings.json"); @@ -108,7 +107,6 @@ public static void Main(string[] args) app.UseAuthentication(); app.UseAuthorization(); - app.MapControllers(); app.Run(); diff --git a/aon.db b/aon.db index 38eb5e8a5a37ad37f3c7cfc05c52cdf4903af204..00ccfe631710361aa8b13cae45948b8b833408c5 100644 GIT binary patch delta 5141 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 delta 1749 zcmeHHO>7%Q6yCR9uh;9JwG%t*#7*OWCyis`Bn=6mB#!Gs)U@TtMJ^~x`LQcQ{$v{@ zBoM|SK`N+CHG+46#%jd{)GDbD795Hy5C;$nP=D=uY z-kW*zX5YN|-dFfVEEMz$PAkhWjF0wOYrGiheu!nl>EE<;38ZbsV3W2@7sR9~sUH-M z=tcg9woen~{(zu{Www|tVzngMK`WlOL4cfQ9bDaP(o9}s4}nxJvDW}3a*}(Dv&?oI zam5B9vdA`8>~@#}cF?4F4RGdJje*SbAuy5>>nMNE4*`h8D1^X37i{I@!Z1AYPE63r zZZ{O4%D?d9MCw#7mCYqmlQX$pO&@zY9!NGp?lF11V3pJ-J00+%VgPL!$~*j zFzKgB`O;v(oFA;X-3|sMRI~gY;M`kUo$U3(`%$tbenIYXQu#B34EVg2W_?KPAa{*~ ztOz<>vV)P09>Y(n;2;a4lRwP!@`zWt8acy@61`P4H*+GDSMR2)Txf;~R-%tzZ#Jn& zs4`NuY(4XX)ExxPNMl!LS5G7o>FMf>^d0UUk7XmVY*#GX9n1C{&z$WGcZMUKqUyNG zNSoAgRr0tsBl`XQt{1qWGFSMs<@yq5xxy8Ou5cw+nJewIv`KduGo%^w&(c-Xt$)F> zsEI;)7mnhfm6xCC046g<(fJ%F-O;Y&f(?8MKDBjpisW^+%`QFoJTwD)p?h^NK>q>W z8KBVoAF=-}#Aew(@f)U|>1V__;g(R+>d2hkTFbEc3barerpsGxMhROn&1c({JoG z+@$!dHEgOv06ZA2!ZFuezpNJZxwu-?PiCiINxhWM)npT1a=~r<+6}|#@jxqTJ%f*EdSQUb4VrLc6^v+G12?#^cMV#>tE>;;2UX|+y0r><#j;LC e3odVf6Te-DG#pg*$`c##Dcom;%S)DhzP|uIDDqeU diff --git a/wwwroot/images/f373959e-12c7-4aef-aecb-278313dbb326.jpg b/wwwroot/images/f373959e-12c7-4aef-aecb-278313dbb326.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63fac4efa8fcc79dc26a711bd2fd7f4b1a3ca72d GIT binary patch literal 363422 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

S1e*o@pgbDaUklo$W^BM_N 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 z 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