public async Task <DatumModel> UpdateAsync(string stuffId, DatumModel input)
        {
            input.CheckDatum();
            if (stuffId != input.Id)
            {
                throw new ArgumentException("Corrupted data.");
            }

            TUser dbUserAuth = await _userAuth.GetCurrentUserAsync("updated datum");

            TStuff dbStuff = await _context.TStuff.FirstOrDefaultAsync(x => x.StfId.Equals(stuffId));

            if (dbStuff == null || dbStuff.StfUserId != dbUserAuth.UsrId)
            {
                throw new ArgumentException("Corrupted data.");
            }

            // Update stuff
            dbStuff = input.ToUpdate(dbStuff);
            await _context.SaveChangesAsync();

            // Attach user to the stuff for the response
            dbStuff.StfUser = dbUserAuth;
            var result = dbStuff.ToDatumModel();

            return(result);
        }
        public async Task <DatumModel> CreateAsync(DatumModel input)
        {
            input.CheckDatum();
            TStuff dbStuff    = input.ToCreate();
            TUser  dbUserAuth = await _userAuth.GetCurrentUserAsync("created datum");

            TUser dbUser = await _context.TUser.FirstOrDefaultAsync(x => x.UsrId.Equals(dbUserAuth.UsrId));

            if (dbUser == null)
            { // Create and attach new user
                dbUserAuth.UsrCreatedAt = DateTime.UtcNow.ToStrDate();
                dbStuff.StfUser         = dbUserAuth;
            }

            // Attach foreign key
            dbStuff.StfUserId = dbUserAuth.UsrId;
            // Create stuff
            await _context.TStuff.AddAsync(dbStuff);

            await _context.SaveChangesAsync();

            // Attach user to the stuff for the response
            dbStuff.StfUser = dbUserAuth;
            var result = dbStuff.ToDatumModel();

            return(result);
        }
예제 #3
0
        public async Task StuffRepo_SearchListAsync_ShouldThrow_ArgumentException()
        {
            // Arrange
            _context.Add(_dbUser);
            var dbStuffList = new List <TStuff>();

            for (int idx = 0; idx < 7; idx++)
            {
                var tmpStuff = new TStuff
                {
                    StfId = _dbStuff.StfId + (idx + 1), StfUserId = _dbStuff.StfUserId, StfLabel = _dbStuff.StfLabel
                };
                dbStuffList.Add(tmpStuff);
            }

            _context.AddRange(dbStuffList);
            _context.SaveChanges();

            // Act
            var repoResult = _stuffRepo.SearchListAsync("LABEL");
            var exception  = await Record.ExceptionAsync(() => repoResult);

            // Assert
            Assert.NotNull(exception);
            Assert.IsType <ArgumentException>(exception);
            Assert.Equal("Too many results. Please narrow your search.", exception.Message);
        }
        public static TStuff ToUpdate(this DatumModel input, TStuff result)
        {
            result.StfId          = input.Id;
            result.StfLabel       = input.Label;
            result.StfDescription = input.Description;
            result.StfOtherInfo   = input.OtherInfo;
            result.StfUpdatedAt   = DateTime.UtcNow.ToStrDate();

            return(result);
        }
        public async Task DeleteAsync(string stuffId)
        {
            TUser dbUserAuth = await _userAuth.GetCurrentUserAsync("deleted datum");

            TStuff dbStuff = await _context.TStuff.FirstOrDefaultAsync(x => x.StfId.Equals(stuffId));

            if (dbStuff == null || dbStuff.StfUserId != dbUserAuth.UsrId)
            {
                throw new ArgumentException("Corrupted data.");
            }

            _context.TStuff.Remove(dbStuff);
            await _context.SaveChangesAsync();
        }
        public static DatumModel ToDatumModel(this TStuff input)
        {
            var result = input == null ? null : new DatumModel
            {
                Id          = input.StfId,
                Label       = input.StfLabel,
                Description = input.StfDescription,
                OtherInfo   = input.StfOtherInfo,
                CreatedAt   = input.StfCreatedAt.ToUtcDate(),
                UpdatedAt   = input.StfUpdatedAt.ToUtcDate(),
                User        = input.StfUser.ToUserModel()
            };

            return(result);
        }
        public async Task <DatumModel> ReadAsync(string stuffId)
        {
            // Get the stuff and its user
            TStuff dbStuff = await _context.TStuff
                             .Where(x => x.StfId.Equals(stuffId))
                             .Include(x => x.StfUser)
                             .FirstOrDefaultAsync();

            if (dbStuff == null)
            {
                throw new NotFoundException("Stuff not found.");
            }

            var result = dbStuff.ToDatumModel();

            return(result);
        }