1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { Request, Response } from 'express'
- import { BaseHttpController, controller, httpDelete, httpGet, results } from 'inversify-express-utils'
- import { inject } from 'inversify'
- import TYPES from '../Bootstrap/Types'
- import { ProjectorInterface } from '../Projection/ProjectorInterface'
- import { Revision } from '../Domain/Revision/Revision'
- import { RevisionServiceInterface } from '../Domain/Revision/RevisionServiceInterface'
- import { ErrorTag } from '@standardnotes/common'
- import { RevisionProjection } from '../Projection/RevisionProjection'
- @controller('/items/:itemUuid/revisions', TYPES.AuthMiddleware)
- export class RevisionsController extends BaseHttpController {
- constructor(
- @inject(TYPES.RevisionService) private revisionService: RevisionServiceInterface,
- @inject(TYPES.RevisionProjector) private revisionProjector: ProjectorInterface<Revision, RevisionProjection>,
- ) {
- super()
- }
- @httpGet('/')
- public async getRevisions(req: Request, response: Response): Promise<results.JsonResult> {
- const revisions = await this.revisionService.getRevisions(response.locals.user.uuid, req.params.itemUuid)
- const revisionProjections = []
- for (const revision of revisions) {
- revisionProjections.push(await this.revisionProjector.projectSimple(revision))
- }
- return this.json(revisionProjections)
- }
- @httpGet('/:uuid')
- public async getRevision(request: Request, response: Response): Promise<results.JsonResult | results.NotFoundResult> {
- const revision = await this.revisionService.getRevision({
- userRoles: response.locals.roleNames,
- userUuid: response.locals.user.uuid,
- itemUuid: request.params.itemUuid,
- revisionUuid: request.params.uuid,
- })
- if (!revision) {
- return this.notFound()
- }
- const revisionProjection = await this.revisionProjector.projectFull(revision)
- return this.json(revisionProjection)
- }
- @httpDelete('/:uuid')
- public async deleteRevision(
- request: Request,
- response: Response,
- ): Promise<results.BadRequestResult | results.OkResult | results.JsonResult> {
- if (response.locals.readOnlyAccess) {
- return this.json(
- {
- error: {
- tag: ErrorTag.ReadOnlyAccess,
- message: 'Session has read-only access.',
- },
- },
- 401,
- )
- }
- const success = await this.revisionService.removeRevision({
- userUuid: response.locals.user.uuid,
- itemUuid: request.params.itemUuid,
- revisionUuid: request.params.uuid,
- })
- if (!success) {
- return this.badRequest()
- }
- return this.ok()
- }
- }
|