Merge remote-tracking branch 'origin/develop' into BETTERZON-120

This commit is contained in:
Jegor 2021-05-29 11:03:06 +02:00
commit 9ef37cee03
3 changed files with 190 additions and 11 deletions

View File

@ -86,7 +86,7 @@ vendorsRouter.get('/search/:term', async (req: Request, res: Response) => {
} }
}); });
// PUT /manage/deactivatelisting // PUT vendors/manage/deactivatelisting
vendorsRouter.put('/manage/deactivatelisting', async (req: Request, res: Response) => { vendorsRouter.put('/manage/deactivatelisting', async (req: Request, res: Response) => {
try { try {
// Authenticate user // Authenticate user
@ -110,7 +110,7 @@ vendorsRouter.put('/manage/deactivatelisting', async (req: Request, res: Respons
} }
}); });
// PUT /manage/shop/deactivate/:id // PUT vendors/manage/shop/deactivate/:id
vendorsRouter.put('/manage/shop/deactivate/:id', async (req: Request, res: Response) => { vendorsRouter.put('/manage/shop/deactivate/:id', async (req: Request, res: Response) => {
try { try {
// Authenticate user // Authenticate user
@ -133,7 +133,7 @@ vendorsRouter.put('/manage/shop/deactivate/:id', async (req: Request, res: Respo
} }
}); });
// PUT /manage/shop/activate/:id // PUT vendors/manage/shop/activate/:id
vendorsRouter.put('/manage/shop/activate/:id', async (req: Request, res: Response) => { vendorsRouter.put('/manage/shop/activate/:id', async (req: Request, res: Response) => {
try { try {
// Authenticate user // Authenticate user

View File

@ -0,0 +1,5 @@
export interface FavoriteShop {
favorite_id: number;
vendor_id: number;
user_id: number;
}

View File

@ -6,6 +6,7 @@ import {Price} from '../models/price';
import {Observable, of} from 'rxjs'; import {Observable, of} from 'rxjs';
import {Vendor} from '../models/vendor'; import {Vendor} from '../models/vendor';
import {PriceAlarm} from '../models/pricealarm'; import {PriceAlarm} from '../models/pricealarm';
import {FavoriteShop} from '../models/favoriteshop';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -31,7 +32,7 @@ export class ApiService {
* @param id The id of the product to get * @param id The id of the product to get
* @return Observable<Product> An observable containing a single product * @return Observable<Product> An observable containing a single product
*/ */
getProduct(id): Observable<Product> { getProduct(id: number): Observable<Product> {
try { try {
return this.http.get<Product>((this.apiUrl + '/products/' + id)); return this.http.get<Product>((this.apiUrl + '/products/' + id));
} catch (exception) { } catch (exception) {
@ -45,7 +46,7 @@ export class ApiService {
* @param query The search term to match * @param query The search term to match
* @return Observable<Product[]> An observable list of products * @return Observable<Product[]> An observable list of products
*/ */
getProductsByQuery(query): Observable<Product[]> { getProductsByQuery(query: string): Observable<Product[]> {
try { try {
return this.http.get<Product[]>((this.apiUrl + '/products/search/' + query)); return this.http.get<Product[]>((this.apiUrl + '/products/search/' + query));
} catch (exception) { } catch (exception) {
@ -90,10 +91,10 @@ export class ApiService {
* @param productId The product id of the product to fetch the prices for * @param productId The product id of the product to fetch the prices for
* @return Observable<Price[]> An observable list of prices * @return Observable<Price[]> An observable list of prices
*/ */
getLowestPrices(productId): Observable<Price[]> { getLowestPrices(productId: number): Observable<Price[]> {
try { try {
let params = new HttpParams(); let params = new HttpParams();
params = params.append('product', productId); params = params.append('product', productId.toString());
params = params.append('type', 'lowest'); params = params.append('type', 'lowest');
return this.http.get<Price[]>((this.apiUrl + '/prices'), {params}); return this.http.get<Price[]>((this.apiUrl + '/prices'), {params});
} catch (exception) { } catch (exception) {
@ -106,10 +107,10 @@ export class ApiService {
* @param productId The product id of the product to get the price for * @param productId The product id of the product to get the price for
* @return Observable<Price> An observable containing a single price * @return Observable<Price> An observable containing a single price
*/ */
getAmazonPrice(productId): Observable<Price> { getAmazonPrice(productId: number): Observable<Price> {
try { try {
let params = new HttpParams(); let params = new HttpParams();
params = params.append('product', productId); params = params.append('product', productId.toString());
params = params.append('vendor', '1'); params = params.append('vendor', '1');
params = params.append('type', 'newest'); params = params.append('type', 'newest');
return this.http.get<Price>((this.apiUrl + '/prices'), {params}); return this.http.get<Price>((this.apiUrl + '/prices'), {params});
@ -123,10 +124,10 @@ export class ApiService {
* @param productId The product id of the product to fetch the prices for * @param productId The product id of the product to fetch the prices for
* @return Observable<Price[]> An observable list of prices * @return Observable<Price[]> An observable list of prices
*/ */
getCurrentPricePerVendor(productId): Observable<Price[]> { getCurrentPricePerVendor(productId: number): Observable<Price[]> {
try { try {
let params = new HttpParams(); let params = new HttpParams();
params = params.append('product', productId); params = params.append('product', productId.toString());
params = params.append('type', 'newest'); params = params.append('type', 'newest');
return this.http.get<Price[]>((this.apiUrl + '/prices'), {params}); return this.http.get<Price[]>((this.apiUrl + '/prices'), {params});
} catch (exception) { } catch (exception) {
@ -154,6 +155,87 @@ export class ApiService {
} }
} }
/**
* Gets a list of all managed vendors
* @return Observable<Vendor[]> An observable list of vendors
*/
getManagedVendors(): Observable<Vendor[]> {
try {
return this.http.get<Vendor[]>((this.apiUrl + '/vendors/managed'));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Get the specific vendor info by vendor id
* @param id The id of the vendor to get information for
* @return Observable<Vendor> An observable containing a single vendor
*/
getVendorById(id: number): Observable<Vendor> {
try {
return this.http.get<Vendor>((this.apiUrl + '/vendors/' + id));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Gets a list of vendors that match the given search term
* @param query The search term to match
* @return Observable<Product[]> An observable list of vendors
*/
getVendorsByQuery(query: string): Observable<Vendor[]> {
try {
return this.http.get<Vendor[]>((this.apiUrl + '/vendors/search/' + query));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Deactivates the specified product listing for the specified vendor
* @param vendorId The vendor id of the vendor to deactivate the product for
* @param productId The product id of the product to deactivate
* @return Observable<any> The observable response of the api
*/
deactivateSingleVendorListing(vendorId: number, productId: number): Observable<any> {
try {
return this.http.put((this.apiUrl + '/vendors/manage/deactivatelisting'), JSON.stringify({
vendor_id: vendorId,
product_id: productId
}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Deactivates the specified vendor completely
* @param vendorId The vendor id of the vendor to deactivate
* @return Observable<any> The observable response of the api
*/
deactivateVendor(vendorId: number): Observable<any> {
try {
return this.http.put((this.apiUrl + '/vendors/manage/shop/deactivate/' + vendorId), JSON.stringify({}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Activates the specified vendor completely
* @param vendorId The vendor id of the vendor to activate
* @return Observable<any> The observable response of the api
*/
activateVendor(vendorId: number): Observable<any> {
try {
return this.http.put((this.apiUrl + '/vendors/manage/shop/activate/' + vendorId), JSON.stringify({}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/* ____ _ ___ __ /* ____ _ ___ __
/ __ \_____(_)_______ / | / /___ __________ ___ _____ / __ \_____(_)_______ / | / /___ __________ ___ _____
@ -207,4 +289,96 @@ export class ApiService {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`); process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
} }
} }
/* __ __
/ / / /_______ __________
/ / / / ___/ _ \/ ___/ ___/
/ /_/ (__ ) __/ / (__ )
\____/____/\___/_/ /____/
*/
/**
* Registers a new user with the API
* @param username The username for the new user
* @param password The password for the new user
* @param email The email address for the new user
* @return Observable<any> The observable response of the api
*/
registerUser(username: string, password: string, email: string): Observable<any> {
try {
return this.http.post((this.apiUrl + '/users/register'), JSON.stringify({
username,
password,
email
}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Logs a user in with the api
* @param username The username of the user to log in
* @param password The password of the user to log in
* @return Observable<any> The observable response of the api
*/
loginUser(username: string, password: string): Observable<any> {
try {
return this.http.post((this.apiUrl + '/users/login'), JSON.stringify({
username,
password
}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/* ______ _ __ __
/ ____/___ __ ______ _____(_) /____ _____/ /_ ____ ____ _____
/ /_ / __ `/ | / / __ \/ ___/ / __/ _ \ / ___/ __ \/ __ \/ __ \/ ___/
/ __/ / /_/ /| |/ / /_/ / / / / /_/ __/ (__ ) / / / /_/ / /_/ (__ )
/_/ \__,_/ |___/\____/_/ /_/\__/\___/ /____/_/ /_/\____/ .___/____/
/_/
*/
/**
* Gets a list of all favorite shops
* @return Observable<FavoriteShop[]> An observable list of favorite shops
*/
getFavoriteShops(): Observable<FavoriteShop[]> {
try {
return this.http.get<FavoriteShop[]>((this.apiUrl + '/favoriteshops'));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Adds a vendor as a favorite
* @param vendorId The id of the vendor to mark as favorite
* @return Observable<any> The observable response of the api
*/
addFavoriteShop(vendorId: number): Observable<any> {
try {
return this.http.post((this.apiUrl + '/favoriteshops'), JSON.stringify({
vendor_id: vendorId
}));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
/**
* Deletes a vendor from favorites
* @param vendorId The id of the vendor to delete from favorites
* @return Observable<any> The observable response of the api
*/
deleteFavoriteShop(vendorId: number): Observable<any> {
try {
return this.http.delete((this.apiUrl + '/favoriteshops/' + vendorId));
} catch (exception) {
process.stderr.write(`ERROR received from ${this.apiUrl}: ${exception}\n`);
}
}
} }