diff --git a/Backend/src/models/contact_persons/contact_persons.router.ts b/Backend/src/models/contact_persons/contact_persons.router.ts index bb2d1a0..85c8035 100644 --- a/Backend/src/models/contact_persons/contact_persons.router.ts +++ b/Backend/src/models/contact_persons/contact_persons.router.ts @@ -89,7 +89,7 @@ contactpersonsRouter.post('/', async (req: Request, res: Response) => { const success = await ContactPersonService.createContactEntry(user.user_id, vendor_id, first_name, last_name, gender, email, phone); if (success) { - res.sendStatus(200); + res.sendStatus(201); } else { res.sendStatus(500); } diff --git a/Backend/src/models/pricealarms/pricealarms.router.ts b/Backend/src/models/pricealarms/pricealarms.router.ts index cc42032..fcd4939 100644 --- a/Backend/src/models/pricealarms/pricealarms.router.ts +++ b/Backend/src/models/pricealarms/pricealarms.router.ts @@ -85,11 +85,11 @@ pricealarmsRouter.put('/', async (req: Request, res: Response) => { return; } - // Create price alarm + // Update price alarm const success = await PriceAlarmsService.updatePriceAlarm(alarm_id, user.user_id, defined_price); if (success) { - res.status(201).send(JSON.stringify({success: true})); + res.status(200).send(JSON.stringify({success: true})); return; } else { res.status(500).send(JSON.stringify({success: false})); diff --git a/Backend/src/models/prices/prices.router.ts b/Backend/src/models/prices/prices.router.ts index 047ce1b..6d3d389 100644 --- a/Backend/src/models/prices/prices.router.ts +++ b/Backend/src/models/prices/prices.router.ts @@ -117,7 +117,7 @@ pricesRouter.post('/', async (req: Request, res: Response) => { const success = await PriceService.createPriceEntry(user.user_id, vendor_id, product_id, price_in_cents); if (success) { - res.sendStatus(200); + res.sendStatus(201); } else { res.sendStatus(500); } diff --git a/Backend/src/models/users/users.router.ts b/Backend/src/models/users/users.router.ts index db28a93..fe67f1b 100644 --- a/Backend/src/models/users/users.router.ts +++ b/Backend/src/models/users/users.router.ts @@ -105,7 +105,7 @@ usersRouter.post('/checkSessionValid', async (req: Request, res: Response) => { } // Send the session details back to the user - res.status(201).send(user); + res.status(200).send(user); } catch (e) { console.log('Error handling a request: ' + e.message); res.status(500).send(JSON.stringify({'message': 'Internal Server Error. Try again later.'})); diff --git a/Frontend/src/app/models/category.ts b/Frontend/src/app/models/category.ts new file mode 100644 index 0000000..a909167 --- /dev/null +++ b/Frontend/src/app/models/category.ts @@ -0,0 +1,4 @@ +export interface Category { + category_id: number; + name: string; +} diff --git a/Frontend/src/app/models/contactperson.ts b/Frontend/src/app/models/contactperson.ts new file mode 100644 index 0000000..51a603b --- /dev/null +++ b/Frontend/src/app/models/contactperson.ts @@ -0,0 +1,9 @@ +export interface ContactPerson { + contact_person_id: number; + first_name: string; + last_name: string; + gender: string; + email: string; + phone: string; + vendor_id: number; +} diff --git a/Frontend/src/app/models/crawlingstatus.ts b/Frontend/src/app/models/crawlingstatus.ts new file mode 100644 index 0000000..c54d914 --- /dev/null +++ b/Frontend/src/app/models/crawlingstatus.ts @@ -0,0 +1,7 @@ +export interface CrawlingStatus { + process_id: number; + started_timestamp: Date; + combinations_to_crawl: number; + successful_crawls: number; + failed_crawls: number; +} diff --git a/Frontend/src/app/models/manufacturer.ts b/Frontend/src/app/models/manufacturer.ts new file mode 100644 index 0000000..08e8ea8 --- /dev/null +++ b/Frontend/src/app/models/manufacturer.ts @@ -0,0 +1,4 @@ +export interface Manufacturer { + manufacturer_id: number; + name: string; +} diff --git a/Frontend/src/app/services/api.service.ts b/Frontend/src/app/services/api.service.ts index b050996..8d06a81 100644 --- a/Frontend/src/app/services/api.service.ts +++ b/Frontend/src/app/services/api.service.ts @@ -7,6 +7,10 @@ import {Observable, of} from 'rxjs'; import {Vendor} from '../models/vendor'; import {PriceAlarm} from '../models/pricealarm'; import {FavoriteShop} from '../models/favoriteshop'; +import {ContactPerson} from '../models/contactperson'; +import {Category} from '../models/category'; +import {Manufacturer} from '../models/manufacturer'; +import {CrawlingStatus} from '../models/crawlingstatus'; @Injectable({ providedIn: 'root' @@ -381,4 +385,216 @@ export class ApiService { process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); } } + + + /* ______ __ __ ____ + / ____/___ ____ / /_____ ______/ /_ / __ \___ ______________ ____ _____ + / / / __ \/ __ \/ __/ __ `/ ___/ __/ / /_/ / _ \/ ___/ ___/ __ \/ __ \/ ___/ + / /___/ /_/ / / / / /_/ /_/ / /__/ /_ / ____/ __/ / (__ ) /_/ / / / (__ ) + \____/\____/_/ /_/\__/\__,_/\___/\__/ /_/ \___/_/ /____/\____/_/ /_/____/ + */ + + /** + * Gets a list of all contact persons + * @return Observable An observable list of contact persons + */ + getContactPersons(): Observable { + try { + return this.http.get((this.apiUrl + '/contactpersons')); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Gets the specified contact person by id + * @param id the id of the contact person to get info about + * @return Observable An observable containing a single contact person + */ + getContactPersonById(id: number): Observable { + try { + return this.http.get((this.apiUrl + '/contactpersons/' + id)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Gets the contact persons for the specified vendor + * @param vendorId the id of the vendor to get the contact persons for + * @return Observable An observable list of contact persons + */ + getContactPersonsByVendor(vendorId: number): Observable { + try { + return this.http.get((this.apiUrl + '/contactpersons/byvendor/' + vendorId)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Adds a contact person for the specified vendor + * @param vendorId The id of the vendor to mark as favorite + * @param firstName The given name of the contact person + * @param lastName The family name of the contact person + * @param gender The gender of the contact person + * @param email The email address of the contact person + * @param phone The phone number of the contact person + * @return Observable The observable response of the api + */ + addContactPerson(vendorId: number, firstName: string, lastName: string, gender: string, email: string, phone: string): Observable { + try { + return this.http.post((this.apiUrl + '/contactpersons'), JSON.stringify({ + vendor_id: vendorId, + first_name: firstName, + last_name: lastName, + gender, + email, + phone + })); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Updates the specified contact person record + * @param contactId The id of the contact person record + * @param vendorId The id of the vendor to mark as favorite + * @param firstName The given name of the contact person + * @param lastName The family name of the contact person + * @param gender The gender of the contact person + * @param email The email address of the contact person + * @param phone The phone number of the contact person + * @return Observable The observable response of the api + */ + updateContactPerson(contactId: number, vendorId: number, firstName: string, lastName: string, gender: string, email: string, phone: string): Observable { + try { + return this.http.put((this.apiUrl + '/contactpersons/' + contactId), JSON.stringify({ + vendor_id: vendorId, + first_name: firstName, + last_name: lastName, + gender, + email, + phone + })); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + + /* ______ __ _ + / ____/___ _/ /____ ____ _____ _____(_)__ _____ + / / / __ `/ __/ _ \/ __ `/ __ \/ ___/ / _ \/ ___/ + / /___/ /_/ / /_/ __/ /_/ / /_/ / / / / __(__ ) + \____/\__,_/\__/\___/\__, /\____/_/ /_/\___/____/ + /____/ + */ + + /** + * Gets the specified category from the API + * @param id The id of the category to get + * @return Observable An observable containing a single category + */ + getCategoryById(id: number): Observable { + try { + return this.http.get((this.apiUrl + '/categories/' + id)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + + /** + * Gets a list of categories that match the given search term + * @param query The search term to match + * @return Observable An observable list of categories + */ + getCategoriesByQuery(query: string): Observable { + try { + return this.http.get((this.apiUrl + '/categories/search/' + query)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Gets a list of all categories + * @return Observable An observable list of categories + */ + getCategories(): Observable { + try { + return this.http.get((this.apiUrl + '/categories')); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /* __ ___ ____ __ + / |/ /___ _____ __ __/ __/___ ______/ /___ __________ __________ + / /|_/ / __ `/ __ \/ / / / /_/ __ `/ ___/ __/ / / / ___/ _ \/ ___/ ___/ + / / / / /_/ / / / / /_/ / __/ /_/ / /__/ /_/ /_/ / / / __/ / (__ ) + /_/ /_/\__,_/_/ /_/\__,_/_/ \__,_/\___/\__/\__,_/_/ \___/_/ /____/ + */ + + /** + * Gets the specified manufacturer from the API + * @param id The id of the manufacturer to get + * @return Observable An observable containing a single manufacturer + */ + getManufacturerById(id: number): Observable { + try { + return this.http.get((this.apiUrl + '/manufacturers/' + id)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + + /** + * Gets a list of manufacturers that match the given search term + * @param query The search term to match + * @return Observable An observable list of manufacturers + */ + getManufacturersByQuery(query: string): Observable { + try { + return this.http.get((this.apiUrl + '/manufacturers/search/' + query)); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + /** + * Gets a list of all manufacturers + * @return Observable An observable list of manufacturer + */ + getManufacturers(): Observable { + try { + return this.http.get((this.apiUrl + '/manufacturers')); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } + + + /* ______ ___ _____ __ __ + / ____/________ __ __/ (_)___ ____ _ / ___// /_____ _/ /___ _______ + / / / ___/ __ `/ | /| / / / / __ \/ __ `/ \__ \/ __/ __ `/ __/ / / / ___/ + / /___/ / / /_/ /| |/ |/ / / / / / / /_/ / ___/ / /_/ /_/ / /_/ /_/ (__ ) + \____/_/ \__,_/ |__/|__/_/_/_/ /_/\__, / /____/\__/\__,_/\__/\__,_/____/ + /____/ + */ + + /** + * Gets the current crawling status + * @return Observable An observable containing a single crawling status object + */ + getCurrentCrawlingStatus(): Observable { + try { + return this.http.get((this.apiUrl + '/crawlingstatus')); + } catch (exception) { + process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); + } + } }