public async Task <CheckSheetEntry> Create(CheckSheetEntry data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            await using var transaction = await _context.Database
                                          .BeginTransactionAsync()
                                          .ConfigureAwait(false);

            try
            {
                await _context.CheckSheetEntries.AddAsync(data).ConfigureAwait(false);

                await _context.SaveChangesAsync().ConfigureAwait(false);

                await transaction.CommitAsync().ConfigureAwait(false);

                return(data);
            }
            catch (Exception e)
            {
                await transaction.RollbackAsync().ConfigureAwait(false);

                throw new Exception(e.Message);
            }
        }
        public async Task <CheckSheetEntry> Update(CheckSheetEntry data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            await using var transaction = await _context.Database
                                          .BeginTransactionAsync()
                                          .ConfigureAwait(false);

            try
            {
                _context.CheckSheetEntries.Update(data);
                await _context.SaveChangesAsync().ConfigureAwait(false);

                await transaction.CommitAsync().ConfigureAwait(false);

                return(await _context.CheckSheetEntries
                       .Include(x => x.Rechecks)
                       .FirstOrDefaultAsync(x => x.CheckSheetEntryId == data.CheckSheetEntryId));
            }
            catch (Exception e)
            {
                await transaction.RollbackAsync().ConfigureAwait(false);

                throw new Exception(e.Message);
            }
        }
        public async Task <CheckSheetEntry> AddOrUpdate(CheckSheetEntry data)
        {
            var entity = await IsExist(data);

            if (entity != null)
            {
                data.CheckSheetEntryId = entity.CheckSheetEntryId;
            }

            return(await Update(data));
        }
        public async Task <IActionResult> Post(CheckSheetEntry data)
        {
            if (data == null)
            {
                return(BadRequest());
            }

            try
            {
                switch (data.Value)
                {
                case null when data.ValueBool == null && data.CheckSheetEntryId == 0:
                    return(Ok(
                               new CheckSheetResultDto
                    {
                        Status = 0,
                        StatusText = "Null entry",
                        Result = data
                    }
                               ));

                case null when data.ValueBool == null && data.CheckSheetEntryId > 0:
                    await _service.Delete(data.CheckSheetEntryId);

                    return(Ok(
                               new CheckSheetResultDto
                    {
                        Status = 1,
                        StatusText = "Delete",
                        Result = data
                    }
                               ));

                default:
                    return(Ok(
                               new CheckSheetResultDto
                    {
                        Status = 2,
                        StatusText = "Add/Update",
                        Result = await _service.Update(data).ConfigureAwait(false)
                    }
                               ));
                }
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
        public async Task <CheckSheetEntry> IsExist(CheckSheetEntry data)
        {
            var result = await _context.CheckSheetEntries
                         .AsNoTracking()
                         .FirstOrDefaultAsync(
                x =>
                x.CharacteristicId == data.CharacteristicId &&
                x.Part == data.Part &&
                x.Frequency == data.Frequency &&
                x.CheckSheetId == data.CheckSheetId &&
                x.SubMachineId == data.SubMachineId
                )
                         .ConfigureAwait(false);

            return(result);
        }