feat: implement rating summary service methods and integrate rating display components into the organization header and pending ratings page
This commit is contained in:
@@ -1,13 +1,24 @@
|
||||
import { Body, Controller, Middlewares, Post, Response, Route, SuccessResponse } from "tsoa";
|
||||
import { ApiVoidResult } from "../../Models/Api.VoidResult.type";
|
||||
import { CreateRatingParams, PendingRatingItem, PendingRatingsByUserParams } from "../../Models/Ratings/Ratings.Interface";
|
||||
import {
|
||||
CountRatingsByUserParams,
|
||||
CountRatingsByUserResult,
|
||||
CreateRatingParams,
|
||||
PendingRatingItem,
|
||||
PendingRatingsByUserParams,
|
||||
ProfessionalRatingSummaryByUserParams,
|
||||
RatingTargetReviewItem,
|
||||
RatingTargetReviewsParams,
|
||||
RatingTargetSummaryParams,
|
||||
RatingTargetSummaryResult,
|
||||
} from "../../Models/Ratings/Ratings.Interface";
|
||||
import { ApiValidationError } from "../../Models/Server.Error.model";
|
||||
import { authenticateMiddleware } from "../../middleware/authentication";
|
||||
import { rateLimiter } from "../../middleware/ratelimiter";
|
||||
import { ratingRateLimiter } from "../../middleware/ratelimiter";
|
||||
import { RatingsService } from "./Ratings.Service";
|
||||
|
||||
@Route("ratings/create")
|
||||
@Middlewares([rateLimiter, authenticateMiddleware])
|
||||
@Middlewares([ratingRateLimiter, authenticateMiddleware])
|
||||
export class CreateRatingController extends Controller {
|
||||
@Response<ApiValidationError>(500, "Ha ocurrido un error")
|
||||
@SuccessResponse(200, "Calificación creada con éxito")
|
||||
@@ -45,3 +56,85 @@ export class PendingRatingsByUserController extends Controller {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Route("ratings/count-by-user")
|
||||
@Middlewares([authenticateMiddleware])
|
||||
export class CountRatingsByUserController extends Controller {
|
||||
@Response<ApiValidationError>(500, "Ha ocurrido un error")
|
||||
@SuccessResponse(200, "Busqueda completada con exito")
|
||||
@Post()
|
||||
public async countByUser(
|
||||
@Body() requestBody: CountRatingsByUserParams
|
||||
): Promise<CountRatingsByUserResult | ApiValidationError> {
|
||||
try {
|
||||
const ratingsCount = await new RatingsService().countByUser(requestBody);
|
||||
this.setStatus(200);
|
||||
return ratingsCount;
|
||||
} catch (e) {
|
||||
const errorOccurred: Error = e as Error;
|
||||
this.setStatus(500);
|
||||
return new ApiValidationError(500, errorOccurred.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Route("ratings/professional-summary-by-user")
|
||||
@Middlewares([authenticateMiddleware])
|
||||
export class ProfessionalRatingSummaryByUserController extends Controller {
|
||||
@Response<ApiValidationError>(500, "Ha ocurrido un error")
|
||||
@SuccessResponse(200, "Busqueda completada con exito")
|
||||
@Post()
|
||||
public async professionalSummaryByUser(
|
||||
@Body() requestBody: ProfessionalRatingSummaryByUserParams
|
||||
): Promise<RatingTargetSummaryResult | ApiValidationError> {
|
||||
try {
|
||||
const ratingSummary = await new RatingsService().professionalSummaryByUser(requestBody);
|
||||
this.setStatus(200);
|
||||
return ratingSummary;
|
||||
} catch (e) {
|
||||
const errorOccurred: Error = e as Error;
|
||||
this.setStatus(500);
|
||||
return new ApiValidationError(500, errorOccurred.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Route("ratings/target-summary")
|
||||
export class RatingTargetSummaryController extends Controller {
|
||||
@Response<ApiValidationError>(500, "Ha ocurrido un error")
|
||||
@SuccessResponse(200, "Busqueda completada con exito")
|
||||
@Post()
|
||||
public async summaryByTarget(
|
||||
@Body() requestBody: RatingTargetSummaryParams
|
||||
): Promise<RatingTargetSummaryResult | ApiValidationError> {
|
||||
try {
|
||||
const ratingSummary = await new RatingsService().summaryByTarget(requestBody);
|
||||
this.setStatus(200);
|
||||
return ratingSummary;
|
||||
} catch (e) {
|
||||
const errorOccurred: Error = e as Error;
|
||||
this.setStatus(500);
|
||||
return new ApiValidationError(500, errorOccurred.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Route("ratings/target-reviews")
|
||||
export class RatingTargetReviewsController extends Controller {
|
||||
@Response<ApiValidationError>(500, "Ha ocurrido un error")
|
||||
@SuccessResponse(200, "Busqueda completada con exito")
|
||||
@Post()
|
||||
public async reviewsByTarget(
|
||||
@Body() requestBody: RatingTargetReviewsParams
|
||||
): Promise<RatingTargetReviewItem[] | ApiValidationError> {
|
||||
try {
|
||||
const ratingReviews = await new RatingsService().reviewsByTarget(requestBody);
|
||||
this.setStatus(200);
|
||||
return ratingReviews;
|
||||
} catch (e) {
|
||||
const errorOccurred: Error = e as Error;
|
||||
this.setStatus(500);
|
||||
return new ApiValidationError(500, errorOccurred.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
import { connect } from "mongoose";
|
||||
import RatingsList from "../../Models/Ratings/Ratings";
|
||||
import { CreateRatingParams, IRating, PendingRatingItem, PendingRatingsByUserParams } from "../../Models/Ratings/Ratings.Interface";
|
||||
import {
|
||||
CountRatingsByUserParams,
|
||||
CountRatingsByUserResult,
|
||||
CreateRatingParams,
|
||||
IRating,
|
||||
PendingRatingItem,
|
||||
PendingRatingsByUserParams,
|
||||
ProfessionalRatingSummaryByUserParams,
|
||||
RatingTargetSummaryParams,
|
||||
RatingTargetSummaryResult,
|
||||
RatingTargetReviewItem,
|
||||
RatingTargetReviewsParams,
|
||||
} from "../../Models/Ratings/Ratings.Interface";
|
||||
|
||||
export class RatingsService {
|
||||
public async createRating(data: CreateRatingParams): Promise<IRating> {
|
||||
@@ -12,4 +24,24 @@ export class RatingsService {
|
||||
await connect(`${process.env.DATABASE_CONNECTION}`);
|
||||
return await RatingsList.pendingByUser(data);
|
||||
}
|
||||
|
||||
public async countByUser(data: CountRatingsByUserParams): Promise<CountRatingsByUserResult> {
|
||||
await connect(`${process.env.DATABASE_CONNECTION}`);
|
||||
return await RatingsList.countByUser(data);
|
||||
}
|
||||
|
||||
public async professionalSummaryByUser(data: ProfessionalRatingSummaryByUserParams): Promise<RatingTargetSummaryResult> {
|
||||
await connect(`${process.env.DATABASE_CONNECTION}`);
|
||||
return await RatingsList.professionalSummaryByUser(data);
|
||||
}
|
||||
|
||||
public async summaryByTarget(data: RatingTargetSummaryParams): Promise<RatingTargetSummaryResult> {
|
||||
await connect(`${process.env.DATABASE_CONNECTION}`);
|
||||
return await RatingsList.summaryByTarget(data);
|
||||
}
|
||||
|
||||
public async reviewsByTarget(data: RatingTargetReviewsParams): Promise<RatingTargetReviewItem[]> {
|
||||
await connect(`${process.env.DATABASE_CONNECTION}`);
|
||||
return await RatingsList.reviewsByTarget(data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user