public virtual async Task <TModel> Insert(TInsert request)
        {
            var entity = _mapper.Map <TDatabase>(request);

            _context.Set <TDatabase>().Add(entity);
            await _context.SaveChangesAsync();

            return(_mapper.Map <TModel>(entity));
        }
        public override async Task <Model.Genre> Insert(GenreUpsertRequest request)
        {
            if (await _context.Genres.AnyAsync(i => i.Name == request.Name))
            {
                throw new UserException("Genre already exists!");
            }
            var entity = _mapper.Map <Database.Genre>(request);

            _context.Set <Database.Genre>().Add(entity);
            await _context.SaveChangesAsync();

            return(_mapper.Map <Model.Genre>(entity));
        }
        public override async Task <Model.Playlist> Insert(PlaylistUpsertRequest request)
        {
            var entity = _mapper.Map <Database.Playlist>(request);

            await _context.Playlists.AddAsync(entity);

            await _context.SaveChangesAsync();

            foreach (var trackID in request.Tracks)
            {
                var playlistTrack = new Database.PlaylistTrack()
                {
                    PlaylistID = entity.ID,
                    TrackID    = trackID
                };
                await _context.PlaylistTracks.AddAsync(playlistTrack);
            }
            await _context.SaveChangesAsync();

            return(_mapper.Map <Model.Playlist>(entity));
        }
        public override async Task <Model.Album> Insert(AlbumUpsertRequest request)
        {
            var entity = _mapper.Map <Database.Album>(request);

            await _context.Albums.AddAsync(entity);

            await _context.SaveChangesAsync();

            foreach (var trackID in request.Tracks)
            {
                var albumTrack = new Database.AlbumTrack()
                {
                    AlbumID = entity.ID,
                    TrackID = trackID
                };
                _context.AlbumTracks.Add(albumTrack);
            }
            await _context.SaveChangesAsync();

            return(_mapper.Map <Model.Album>(entity));
        }
        public override async Task <Model.Track> Insert(TrackUpsertRequest request)
        {
            var entity = _mapper.Map <Database.Track>(request);

            await _context.Tracks.AddAsync(entity);

            await _context.SaveChangesAsync();

            var mainTrackArtist = new Database.TrackArtist()
            {
                TrackID         = entity.ID,
                ArtistID        = request.MainArtist,
                TrackArtistRole = TrackArtistRole.Main
            };
            await _context.TrackArtists.AddAsync(mainTrackArtist);

            await _context.SaveChangesAsync();

            foreach (var ArtistID in request.FeaturedArtists)
            {
                var trackArtist = new Database.TrackArtist()
                {
                    TrackID         = entity.ID,
                    ArtistID        = ArtistID,
                    TrackArtistRole = TrackArtistRole.Feature
                };
                await _context.TrackArtists.AddAsync(trackArtist);
            }

            foreach (var GenreID in request.Genres)
            {
                var trackGenre = new Database.TrackGenre()
                {
                    TrackID = entity.ID,
                    GenreID = GenreID
                };
                await _context.TrackGenres.AddAsync(trackGenre);
            }
            await _context.SaveChangesAsync();

            return(_mapper.Map <Model.Track>(entity));
        }
Exemple #6
0
        public override async Task <Model.User> Insert(UserInsertRequest request)
        {
            if (request.Password != request.PasswordConfirmation)
            {
                throw new Exception("Passwords do not match!");
            }

            if (!await IsEmailUnique(request.Email))
            {
                throw new UserException("Email is taken!");
            }

            if (!await IsUsernameUnique(request.Username))
            {
                throw new UserException("Username is taken");
            }

            var entity = _mapper.Map <Database.User>(request);

            entity.PasswordSalt = HashHelper.GenerateSalt();
            entity.PasswordHash = HashHelper.GenerateHash(entity.PasswordSalt, request.Password);

            await _context.Users.AddAsync(entity);

            await _context.SaveChangesAsync();

            foreach (var roleID in request.Roles)
            {
                var role = new Database.UserRole()
                {
                    UserID = entity.ID,
                    RoleID = roleID
                };

                await _context.UserRoles.AddAsync(role);
            }
            await _context.SaveChangesAsync();

            return(_mapper.Map <Model.User>(entity));
        }