Skip to content

Commit 99f1c49

Browse files
committed
Update to P14
1 parent 139a2cd commit 99f1c49

13 files changed

+558
-34
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ __ASP.NET Core 3.0 实现 RESTful API 的学习笔记__
44
<br><br>
55
跟随杨旭老师(solenovex)的[博客](https://www.cnblogs.com/cgzl/p/11814971.html)[视频](https://www.bilibili.com/video/av77957694?from=search&seid=17664776753878261104)课程,学习 RESTful API 在ASP.NET Core 3.0 上的实现。
66
<br>
7-
包含课程中搭建的项目与部分笔记,当前更新到`视频P8`
7+
包含课程中搭建的项目与部分笔记,此项目的内容更新到视频 P14
88
<br><br><br>
99
非常感谢杨老师 🤗
1010
<br>

Routine/Routine.APi/Controllers/CompaniesController.cs

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Microsoft.AspNetCore.Mvc;
1+
using AutoMapper;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Routine.APi.Models;
24
using Routine.APi.Services;
35
using System;
46
using System.Collections.Generic;
@@ -55,40 +57,46 @@ namespace Routine.APi.Controllers
5557
public class CompaniesController:ControllerBase
5658
{
5759
private readonly ICompanyRepository _companyRepository;
60+
private readonly IMapper _mapper;
5861

59-
public CompaniesController(ICompanyRepository companyRepository)
62+
public CompaniesController(ICompanyRepository companyRepository,IMapper mapper)
6063
{
61-
this._companyRepository = companyRepository ??
64+
_companyRepository = companyRepository ??
6265
throw new ArgumentNullException(nameof(companyRepository));
66+
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
6367
}
6468

6569
[HttpGet]
66-
public async Task<IActionResult> GetCompanies()
70+
public async Task<IActionResult> GetCompanies() //Task<IActionResult> = Task<ActionResult<List<CompanyDto>>>
6771
{
6872
var companies = await _companyRepository.GetCompaniesAsync();
69-
return Ok(companies); //OK() 返回状态码200
73+
74+
//不使用 AutoMapper
75+
//var companyDtos = new List<CompanyDto>();
76+
//foreach(var company in companies)
77+
//{
78+
// companyDtos.Add(new CompanyDto
79+
// {
80+
// Id = company.Id,
81+
// Name = company.Name
82+
// });
83+
//}
84+
85+
//使用 AutoMapper
86+
var companyDtos = _mapper.Map<IEnumerable<CompanyDto>>(companies);
87+
88+
return Ok(companyDtos); //OK() 返回状态码200
7089
}
7190

7291
[HttpGet("{companyId}")] //还可用 [Route("{companyId}")]
7392
public async Task<IActionResult> GetCompany(Guid companyId)
7493
{
75-
//不适合高并发的方法:
76-
//var exist = await _companyRepository.CompanyExistsAsync(companyId);
77-
//if (!exist)
78-
//{
79-
// return NotFound(); //返回状态码404
80-
//}
81-
//var company = await _companyRepository.GetCompanyAsync(companyId);
82-
//return Ok(company);
83-
//
84-
85-
//略有改善的方法:
8694
var company = await _companyRepository.GetCompanyAsync(companyId);
8795
if (company == null)
8896
{
8997
return NotFound(); //返回状态码404
9098
}
91-
return Ok(company);
99+
return Ok(_mapper.Map<CompanyDto>(company));
92100
}
93101

94102
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using AutoMapper;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Routine.APi.Entities;
4+
using Routine.APi.Models;
5+
using Routine.APi.Services;
6+
using System;
7+
using System.Collections.Generic;
8+
using System.Linq;
9+
using System.Threading.Tasks;
10+
11+
namespace Routine.APi.Controllers
12+
{
13+
[ApiController]
14+
[Route("api/companies/{companyId}/employees")]
15+
public class EmployeesController : ControllerBase
16+
{
17+
private readonly ICompanyRepository _companyRepository;
18+
private readonly IMapper _mapper;
19+
20+
public EmployeesController(ICompanyRepository companyRepository, IMapper mapper)
21+
{
22+
_companyRepository = companyRepository ?? throw new ArgumentNullException(nameof(companyRepository));
23+
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
24+
25+
}
26+
27+
[HttpGet]
28+
public async Task<IActionResult> GetEmployeesForCompany(Guid companyId)
29+
{
30+
if (await _companyRepository.CompanyExistsAsync(companyId))
31+
{
32+
var employees = await _companyRepository.GetEmployeesAsync(companyId);
33+
var employeeDtos = _mapper.Map<IEnumerable<EmployeeDto>>(employees);
34+
return Ok(employeeDtos);
35+
}
36+
else
37+
{
38+
return NotFound();
39+
}
40+
}
41+
42+
[HttpGet("{employeeId}")]
43+
public async Task<IActionResult> GetEmployeesForCompany(Guid companyId,Guid employeeId)
44+
{
45+
if (await _companyRepository.CompanyExistsAsync(companyId))
46+
{
47+
var employee = await _companyRepository.GetEmployeeAsync(companyId,employeeId);
48+
if (employee == null)
49+
{
50+
return NotFound();
51+
}
52+
var employeeDto = _mapper.Map<EmployeeDto>(employee);
53+
return Ok(employeeDto);
54+
}
55+
else
56+
{
57+
return NotFound();
58+
}
59+
}
60+
}
61+
}

Routine/Routine.APi/Data/RoutineDbContext.cs

Lines changed: 79 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Routine.APi.Data
1010
public class RoutineDbContext : DbContext
1111
{
1212
//调用并获取父类的options
13-
public RoutineDbContext(DbContextOptions<RoutineDbContext>options):base(options)
13+
public RoutineDbContext(DbContextOptions<RoutineDbContext> options) : base(options)
1414
{
1515

1616
}
@@ -21,10 +21,10 @@ public RoutineDbContext(DbContextOptions<RoutineDbContext>options):base(options)
2121
protected override void OnModelCreating(ModelBuilder modelBuilder)
2222
{
2323
modelBuilder.Entity<Company>().Property(x => x.Name).IsRequired().HasMaxLength(100);
24-
modelBuilder.Entity<Company>().Property(x=>x.Introduction).HasMaxLength(500);
25-
modelBuilder.Entity<Employee>().Property(x=>x.EmployeeNo).IsRequired().HasMaxLength(10);
26-
modelBuilder.Entity<Employee>().Property(x=>x.FirstName).IsRequired().HasMaxLength(50);
27-
modelBuilder.Entity<Employee>().Property(x=>x.LastName).IsRequired().HasMaxLength(50);
24+
modelBuilder.Entity<Company>().Property(x => x.Introduction).HasMaxLength(500);
25+
modelBuilder.Entity<Employee>().Property(x => x.EmployeeNo).IsRequired().HasMaxLength(10);
26+
modelBuilder.Entity<Employee>().Property(x => x.FirstName).IsRequired().HasMaxLength(50);
27+
modelBuilder.Entity<Employee>().Property(x => x.LastName).IsRequired().HasMaxLength(50);
2828
modelBuilder.Entity<Employee>()
2929
//指明一对多关系(可省略)
3030
.HasOne(x => x.Company)
@@ -33,26 +33,89 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
3333
.HasForeignKey(x => x.CompanyId)
3434
//删除Company时如果有Employee,则无法删除
3535
.OnDelete(DeleteBehavior.Restrict);
36+
//种子数据
3637
modelBuilder.Entity<Company>().HasData(
37-
new Company
38+
new Company
3839
{
39-
Id=Guid.Parse("bbdee09c-089b-4d30-bece-44df5923716c"),
40-
Name="Microsoft",
41-
Introduction="Great Company"
40+
Id = Guid.Parse("bbdee09c-089b-4d30-bece-44df5923716c"),
41+
Name = "Microsoft",
42+
Introduction = "Great Company"
4243
},
4344
new Company
4445
{
45-
Id=Guid.Parse("6fb600c1-9011-4fd7-9234-881379716440"),
46-
Name="Google",
47-
Introduction="Don't be evil"
46+
Id = Guid.Parse("6fb600c1-9011-4fd7-9234-881379716440"),
47+
Name = "Google",
48+
Introduction = "Don't be evil"
4849
},
4950
new Company
5051
{
51-
Id=Guid.Parse("5efc910b-2f45-43df-afee-620d40542853"),
52-
Name="Alipapa",
53-
Introduction="Fubao Company"
52+
Id = Guid.Parse("5efc910b-2f45-43df-afee-620d40542853"),
53+
Name = "Alipapa",
54+
Introduction = "Fubao Company"
55+
}
56+
);
57+
modelBuilder.Entity<Employee>().HasData(
58+
new Employee
59+
{
60+
Id=Guid.Parse("ca268a19-0f39-4d8b-b8d6-5bace54f8027"),
61+
CompanyId = Guid.Parse("bbdee09c-089b-4d30-bece-44df5923716c"),
62+
DateOfBirth = new DateTime(1955, 10, 28),
63+
EmployeeNo = "M001",
64+
FirstName = "William",
65+
LastName = "Gates",
66+
Gender = Gender.
67+
},
68+
new Employee
69+
{
70+
Id = Guid.Parse("265348d2-1276-4ada-ae33-4c1b8348edce"),
71+
CompanyId = Guid.Parse("bbdee09c-089b-4d30-bece-44df5923716c"),
72+
DateOfBirth = new DateTime(1998, 1, 14),
73+
EmployeeNo = "M024",
74+
FirstName = "Kent",
75+
LastName = "Back",
76+
Gender = Gender.
77+
},
78+
new Employee
79+
{
80+
Id = Guid.Parse("47b70abc-98b8-4fdc-b9fa-5dd6716f6e6b"),
81+
CompanyId = Guid.Parse("6fb600c1-9011-4fd7-9234-881379716440"),
82+
DateOfBirth = new DateTime(1986, 11, 4),
83+
EmployeeNo = "G003",
84+
FirstName = "Mary",
85+
LastName = "King",
86+
Gender = Gender.
87+
},
88+
new Employee
89+
{
90+
Id = Guid.Parse("059e2fcb-e5a4-4188-9b46-06184bcb111b"),
91+
CompanyId = Guid.Parse("6fb600c1-9011-4fd7-9234-881379716440"),
92+
DateOfBirth = new DateTime(1977, 4, 6),
93+
EmployeeNo = "G007",
94+
FirstName = "Kevin",
95+
LastName = "Richardson",
96+
Gender = Gender.
97+
},
98+
new Employee
99+
{
100+
Id = Guid.Parse("a868ff18-3398-4598-b420-4878974a517a"),
101+
CompanyId = Guid.Parse("5efc910b-2f45-43df-afee-620d40542853"),
102+
DateOfBirth = new DateTime(1964, 9, 10),
103+
EmployeeNo = "A001",
104+
FirstName = "Jack",
105+
LastName = "Ma",
106+
Gender = Gender.
107+
},
108+
new Employee
109+
{
110+
Id = Guid.Parse("2c3bb40c-5907-4eb7-bb2c-7d62edb430c9"),
111+
CompanyId = Guid.Parse("5efc910b-2f45-43df-afee-620d40542853"),
112+
DateOfBirth = new DateTime(1997, 2, 6),
113+
EmployeeNo = "A201",
114+
FirstName = "Lorraine",
115+
LastName = "Shaw",
116+
Gender = Gender.
54117
}
55-
);
118+
);
56119
}
57120
}
58121
}

0 commit comments

Comments
 (0)