Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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}."));
            }
        }
Exemplo n.º 3
0
 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
     });
 }
Exemplo n.º 4
0
        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}."));
            }
        }
Exemplo n.º 5
0
        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);
                }
            }
        }
Exemplo n.º 6
0
        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;
                }
            }
        }
Exemplo n.º 7
0
        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);
        }