mirror of
https://github.com/Raghu-Ch/angular-challenges.git
synced 2026-02-13 22:33:03 -05:00
fix(test): move all test apps
This commit is contained in:
109
apps/testing/todos-list/src/app/backend.service.ts
Normal file
109
apps/testing/todos-list/src/app/backend.service.ts
Normal file
@@ -0,0 +1,109 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, delay, of, throwError } from 'rxjs';
|
||||
|
||||
export type User = {
|
||||
id: number;
|
||||
name: string;
|
||||
};
|
||||
|
||||
export interface BaseTicket {
|
||||
id: number;
|
||||
description: string;
|
||||
completed: boolean;
|
||||
}
|
||||
|
||||
export interface Ticket extends BaseTicket {
|
||||
assigneeId: number | null;
|
||||
}
|
||||
|
||||
export interface TicketUser extends BaseTicket {
|
||||
assignee: string;
|
||||
}
|
||||
|
||||
function randomDelay() {
|
||||
return Math.random() * 1000;
|
||||
}
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class BackendService {
|
||||
storedTickets: Ticket[] = [
|
||||
{
|
||||
id: 0,
|
||||
description: 'Install a monitor arm',
|
||||
assigneeId: 111,
|
||||
completed: false,
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
description: 'Move the desk to the new location',
|
||||
assigneeId: 111,
|
||||
completed: false,
|
||||
},
|
||||
];
|
||||
|
||||
storedUsers: User[] = [
|
||||
{ id: 111, name: 'Thomas' },
|
||||
{ id: 222, name: 'Jack' },
|
||||
];
|
||||
|
||||
lastId = 1;
|
||||
|
||||
private findTicketById = (id: number) =>
|
||||
this.storedTickets.find((ticket) => ticket.id === +id);
|
||||
|
||||
private findUserById = (id: number) =>
|
||||
this.storedUsers.find((user) => user.id === +id);
|
||||
|
||||
tickets() {
|
||||
return of(this.storedTickets).pipe(delay(randomDelay()));
|
||||
}
|
||||
|
||||
ticket(id: number): Observable<Ticket | undefined> {
|
||||
return of(this.findTicketById(id)).pipe(delay(randomDelay()));
|
||||
}
|
||||
|
||||
users() {
|
||||
return of(this.storedUsers).pipe(delay(randomDelay()));
|
||||
}
|
||||
|
||||
user(id: number) {
|
||||
return of(this.findUserById(id)).pipe(delay(randomDelay()));
|
||||
}
|
||||
|
||||
newTicket(payload: { description: string }) {
|
||||
const newTicket: Ticket = {
|
||||
id: ++this.lastId,
|
||||
description: payload.description,
|
||||
assigneeId: null,
|
||||
completed: false,
|
||||
};
|
||||
|
||||
this.storedTickets = this.storedTickets.concat(newTicket);
|
||||
|
||||
return of(newTicket).pipe(delay(randomDelay()));
|
||||
}
|
||||
|
||||
assign(ticketId: number, userId: number) {
|
||||
return this.update(ticketId, { assigneeId: userId });
|
||||
}
|
||||
|
||||
complete(ticketId: number, completed: boolean) {
|
||||
return this.update(ticketId, { completed });
|
||||
}
|
||||
|
||||
update(ticketId: number, updates: Partial<Omit<Ticket, 'id'>>) {
|
||||
const foundTicket = this.findTicketById(ticketId);
|
||||
|
||||
if (!foundTicket) {
|
||||
return throwError(() => new Error('ticket not found'));
|
||||
}
|
||||
|
||||
const updatedTicket = { ...foundTicket, ...updates };
|
||||
|
||||
this.storedTickets = this.storedTickets.map((t) =>
|
||||
t.id === ticketId ? updatedTicket : t
|
||||
);
|
||||
|
||||
return of(updatedTicket).pipe(delay(randomDelay()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user