214 Invoke Repository in Service 01

为Services项目添加项目引用,引用RepositoryContracts

更新CountriesService.cs以使用Repository

using Entities;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using OfficeOpenXml;
using RepositoryContracts;
using ServiceContracts;
using ServiceContracts.DTO;

namespace Services
{
    public class CountriesService : ICountriesService
    {
        //private field
        private readonly ICountriesRepository _countriesRepository;

        //constructor
        public CountriesService(ICountriesRepository countriesRepository)
        {
            _countriesRepository = countriesRepository;
        }

        public async Task<CountryResponse> AddCountry(CountryAddRequest? 
countryAddRequest)
        {
            //Validation: countryAddRequest parameter can't be null
            if (countryAddRequest == null)
            {
                throw new ArgumentNullException(nameof(countryAddRequest));
            }
            //Validation: CountryName can't be null
            if (countryAddRequest.CountryName == null)
            {
                throw new 
ArgumentException(nameof(countryAddRequest.CountryName));
            }
            //Validation: CountryName can't be duplicate
            if (await 
_countriesRepository.GetCountryByCountryNameAsync(countryAddRequest.CountryName) 
!= null)
            {
                throw new ArgumentException("Given CountryName already exists!");
            }

            //Convert object from CountryAddRequest to Country type
            Country country = countryAddRequest.ToCountry();
            //generate CountryId
            country.CountryId = Guid.NewGuid();
            //Add country object into _db
            await _countriesRepository.AddCountryAsync(country);

            return country.ToCountryResponse();
        }

        public async Task<List<CountryResponse>> GetAllCountries()
        {
            //Convert all countries from "Country" type to "CountryResponse" Type
            return (await 
_countriesRepository.GetAllCountriesAsync()).Select(country => 
country.ToCountryResponse()).ToList();
            //Return all CountryResponse objects

        }

        public async Task<CountryResponse?> GetCountryByCountryId(Guid? 
countryId)
        {
            if (countryId == null)
            {
                return null;
            }
            Country? country = await 
_countriesRepository.GetCountryByCountryIdAsync(countryId.Value);

            if (country == null)
            {
                return null;
            }
            return country.ToCountryResponse();
        }

        public async Task<int> UploadCountriesFromExcelFile(IFormFile fromFile)
        {
            int countriesInserted = 0;
            MemoryStream memoryStream = new MemoryStream();
            await fromFile.CopyToAsync(memoryStream);

            using (ExcelPackage excelPackage = new ExcelPackage(memoryStream))
            {
                ExcelWorksheet worksheet = 
excelPackage.Workbook.Worksheets["Countries"];
                int rowCount = worksheet.Dimension.Rows;
                
                for (int i = 2; i <= rowCount; i++)
                {
                    string? cellValue = Convert.ToString(worksheet.Cells[i, 
1].Value);
                    if (!string.IsNullOrEmpty(cellValue))
                    {
                        string countryName = cellValue;
                        if (await 
_countriesRepository.GetCountryByCountryNameAsync(countryName) == null)
                        {
                            Country country = new Country()
                            {
                                CountryId = Guid.NewGuid(),
                                CountryName = countryName,
                            };
                            await _countriesRepository.AddCountryAsync(country);

                            countriesInserted++;    
                        }
                    }
                }
                
            }

            return countriesInserted;
        }
    }
}

Gitee获取源码:

https://gitee.com/huang_jianhua0101/asp.-net-core-8.git

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值