Skip to content

Commit 99e27c9

Browse files
committed
Angular NgRx Course
1 parent cf601a9 commit 99e27c9

File tree

7 files changed

+34
-17
lines changed

7 files changed

+34
-17
lines changed

server/get-courses.route.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,19 @@ export function getAllCourses(req: Request, res: Response) {
2020
}
2121

2222

23-
export function getCourseById(req: Request, res: Response) {
23+
export function getCourseByUrl(req: Request, res: Response) {
2424

25-
const courseId = req.params["id"];
25+
const courseUrl = req.params["courseUrl"];
2626

2727
const courses:any = Object.values(COURSES);
2828

29-
const course = courses.find(course => course.id == courseId);
29+
const course = courses.find(course => course.url == courseUrl);
30+
31+
setTimeout(() => {
32+
33+
res.status(200).json(course);
34+
35+
}, 1000);
36+
3037

31-
res.status(200).json(course);
3238
}

server/search-lessons.route.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ export function searchLessons(req: Request, res: Response) {
3535

3636
const lessonsPage = lessons.slice(initialPos, initialPos + pageSize);
3737

38-
setTimeout(() => {
39-
res.status(200).json(lessonsPage);
40-
},1000);
41-
38+
res.status(200).json(lessonsPage);
4239

4340
}

server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import * as express from 'express';
44
import {Application} from "express";
5-
import {getAllCourses, getCourseById} from "./get-courses.route";
5+
import {getAllCourses, getCourseByUrl} from "./get-courses.route";
66
import {searchLessons} from "./search-lessons.route";
77
import {loginUser} from "./auth.route";
88
import {saveCourse} from "./save-course.route";
@@ -29,7 +29,7 @@ app.route('/api/course/:id').put(saveCourse);
2929

3030
app.route('/api/course/:id').delete(deleteCourse);
3131

32-
app.route('/api/course/:id').get(getCourseById);
32+
app.route('/api/courses/:courseUrl').get(getCourseByUrl);
3333

3434
app.route('/api/lessons').get(searchLessons);
3535

src/app/courses/course/course.component.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,8 @@ h2 {
4949
margin-top: 20px;
5050
margin-bottom: 200px;
5151
}
52+
53+
54+
.spinner-container {
55+
width:390px;
56+
}

src/app/courses/course/course.component.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {Course} from '../model/course';
44
import {Observable} from 'rxjs';
55
import {Lesson} from '../model/lesson';
66
import {concatMap, delay, filter, first, map, shareReplay, tap, withLatestFrom} from 'rxjs/operators';
7+
import {CoursesHttpService} from '../services/courses-http.service';
78

89

910
@Component({
@@ -19,18 +20,24 @@ export class CourseComponent implements OnInit {
1920

2021
displayedColumns = ['seqNo', 'description', 'duration'];
2122

22-
loading$: Observable<boolean>;
23-
2423
nextPage = 0;
2524

2625
constructor(
26+
private coursesService: CoursesHttpService,
2727
private route: ActivatedRoute) {
2828

2929
}
3030

3131
ngOnInit() {
3232

33+
const courseUrl = this.route.snapshot.paramMap.get("courseUrl");
34+
35+
this.course$ = this.coursesService.findCourseByUrl(courseUrl);
3336

37+
this.lessons$ = this.course$.pipe(
38+
concatMap(course => this.coursesService.findLessons(course.id)),
39+
tap(console.log)
40+
);
3441

3542
}
3643

src/app/courses/courses.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const coursesRoutes: Routes = [
3434

3535
},
3636
{
37-
path: ':id',
37+
path: ':courseUrl',
3838
component: CourseComponent
3939
}
4040
];

src/app/courses/services/courses-http.service.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,21 @@ export class CoursesHttpService {
2222
);
2323
}
2424

25+
findCourseByUrl(courseUrl: string): Observable<Course> {
26+
return this.http.get<Course>(`/api/courses/${courseUrl}`);
27+
}
28+
2529
findLessons(
2630
courseId:number,
2731
pageNumber = 0, pageSize = 3): Observable<Lesson[]> {
2832

29-
return this.http.get('/api/lessons', {
33+
return this.http.get<Lesson[]>('/api/lessons', {
3034
params: new HttpParams()
3135
.set('courseId', courseId.toString())
3236
.set('sortOrder', 'asc')
3337
.set('pageNumber', pageNumber.toString())
3438
.set('pageSize', pageSize.toString())
35-
}).pipe(
36-
map(res => res["payload"])
37-
);
39+
});
3840
}
3941

4042

0 commit comments

Comments
 (0)