private async Task AddVersionAsync(Common.Api.Request.MediaPart requestedPart, Dal.Model.MediaPart addedPart, Dal.Model.User loggedUser) { var version = requestedPart.Version.MediaVersionId == null ? new Dal.Model.MediaVersion() : await context.MediaVersions.SingleOrDefaultAsync(v => v.MediaVersionId == requestedPart.Version.MediaVersionId); version.MediaPartId = addedPart.MediaPartId; version.VersionComment = requestedPart.Version.VersionComment; version.UserId = loggedUser.UserId; version.Created = DateTime.Now; if (requestedPart.Version.MediaVersionId == null) { await context.MediaVersions.AddAsync(version); } await context.SaveChangesAsync(); requestedPart.Version.MediaVersionId = version.MediaVersionId; // Media version tags await AddVersionTagsAsync(requestedPart); // Links await AddLinksAsync(requestedPart.Version, loggedUser); }
public async Task <ActionResult <string> > Register(Common.Api.Request.UserRegister newUser) { // Check if there is an administrator first. Can't allow user to register before Administrator. var adminUser = await context.Users.Where(u => u.Role == Common.User.UserRole.Admin).ToListAsync(); if (adminUser.Count == 0) { return(Conflict("There is no administrator. System needs administrator in order to work.")); } // Check if user exists. var usersFound = await context.Users.Where(u => u.Email == newUser.Email || u.Nickname == newUser.Nickname).ToListAsync(); if (usersFound.Count == 0) { var newUserDb = new Dal.Model.User() { Email = newUser.Email, Password = EncryptPassword(newUser.Password), Nickname = newUser.Nickname, Created = DateTime.Now, Role = Common.User.UserRole.User, Logged = true }; context.Users.Add(newUserDb); await context.SaveChangesAsync(); return(Ok(token.Generate(newUserDb.UserId, newUserDb.Email, Common.User.UserRole.User))); } else { return(Conflict($"There is already user with email {newUser.Email}, or with nickname {newUser.Nickname}.")); } }
public static Common.Api.Response.User MapReponseUser(this Dal.Model.User user) { return(new Common.Api.Response.User { UserId = user.UserId, Nickname = user?.Nickname, Role = user.Role, Created = user.Created }); }
public async Task <ActionResult <string> > Register(Common.Api.Request.UserRegister newUser) { //Validate new user data. if (newUser == null) { return(BadRequest("Please send data for a new user.")); } if (string.IsNullOrWhiteSpace(newUser.Email)) { return(BadRequest("Please send email.")); } if (string.IsNullOrWhiteSpace(newUser.Password)) { return(BadRequest("Please send password.")); } // Check if administrator exists. At this point it can be only one administrator. var adminsFound = await context.Users.Where(u => u.Role == Common.User.UserRole.Admin).ToListAsync(); if (adminsFound.Count == 0) { var newAdminDb = new Dal.Model.User() { Email = newUser.Email, Password = EncryptPassword(newUser.Password), Nickname = adminNickname, // Administrator has fixed nickname. Created = DateTime.Now, Role = Common.User.UserRole.Admin, Logged = true }; context.Users.Add(newAdminDb); await context.SaveChangesAsync(); return(Ok(token.Generate(newAdminDb.UserId, newAdminDb.Email, Common.User.UserRole.Admin))); } else { return(Conflict($"There is already administrator with email {adminsFound.FirstOrDefault()?.Email}.")); } }
private async Task AddPartsAsync(Common.Api.Request.MediaHeader requestedHeader, Dal.Model.MediaHeader addedHeader, Dal.Model.User loggedUser) { if (requestedHeader.Parts != null) { foreach (var requestedPart in requestedHeader.Parts) { Dal.Model.MediaPart part = requestedPart.MediaPartId == null ? new Dal.Model.MediaPart() : await context.MediaParts.SingleOrDefaultAsync(p => p.MediaPartId == requestedPart.MediaPartId); part.MediaHeaderId = addedHeader.MediaHeaderId; part.Season = requestedPart.Season; part.Episode = requestedPart.Episode; part.Name = requestedPart.Name; part.Description = requestedPart.Description; part.ReferenceLink = !string.IsNullOrWhiteSpace(requestedPart.ReferenceLink) ? new Uri(requestedPart.ReferenceLink) : null; part.UserId = loggedUser.UserId; part.Created = DateTime.Now; if (requestedPart.MediaPartId == null) { await context.MediaParts.AddAsync(part); } await context.SaveChangesAsync(); requestedPart.MediaPartId = part.MediaPartId; // Part tags await AddPartTagsAsync(requestedPart); // Media versions and tags await AddVersionAsync(requestedPart, part, loggedUser); } } }
private async Task AddLinksAsync(Common.Api.Request.MediaVersion requestedVersion, Dal.Model.User loggedUser) { if (requestedVersion.Links != null) { int linkIndex = 1; foreach (var requestedLink in requestedVersion.Links) { var link = requestedLink.MediaLinkId == null ? new Dal.Model.MediaLink() : await context.MediaLinks.SingleOrDefaultAsync(l => l.MediaLinkId == requestedLink.MediaLinkId); link.MediaVersionId = (int)requestedVersion.MediaVersionId; link.LinkOrderId = linkIndex++; link.Link = new Uri(requestedLink.Link); link.UserId = loggedUser.UserId; if (requestedLink.MediaLinkId == null) { await context.MediaLinks.AddAsync(link); } await context.SaveChangesAsync(); requestedLink.MediaLinkId = link.MediaLinkId; } } }
private async Task <Dal.Model.MediaHeader> AddOrUpdateHeaderAsync(Common.Api.Request.MediaHeader requestedHeader, Dal.Model.User loggedUser) { Dal.Model.MediaHeader header = requestedHeader.MediaHeaderId == null ? new Dal.Model.MediaHeader() : await context.MediaHeaders.SingleOrDefaultAsync(h => h.MediaHeaderId == (int)requestedHeader.MediaHeaderId); // Change all values except PK (MediaHeaderId) header.Name = requestedHeader.Name; header.Year = requestedHeader.Year; header.Description = requestedHeader.Description; header.ReferenceLink = !string.IsNullOrWhiteSpace(requestedHeader.ReferenceLink) ? new Uri(requestedHeader.ReferenceLink) : null; header.UserId = loggedUser.UserId; if (requestedHeader.MediaHeaderId == null) { await context.MediaHeaders.AddAsync(header); } await context.SaveChangesAsync(); // Save to get MediaId. requestedHeader.MediaHeaderId = header.MediaHeaderId; // Populate id in request structure, so it can be used later if needed. // Header tags await AddHeaderTagsAsync(requestedHeader); // Parts await AddPartsAsync(requestedHeader, header, loggedUser); return(header); }