277 lines
6.8 KiB
TypeScript
277 lines
6.8 KiB
TypeScript
import express from 'express';
|
|
import { UserNoteController } from '../controllers/userNoteController';
|
|
import { authenticate } from '../middleware/auth.middleware';
|
|
import { tenantFilter } from '../middleware/tenant.middleware';
|
|
import { requirePermission, Permission } from '../middleware/permissions.middleware';
|
|
|
|
const router = express.Router();
|
|
|
|
/**
|
|
* @swagger
|
|
* tags:
|
|
* name: User Notes
|
|
* description: User notes management operations
|
|
*/
|
|
|
|
/**
|
|
* @swagger
|
|
* components:
|
|
* schemas:
|
|
* UserNote:
|
|
* type: object
|
|
* properties:
|
|
* _id:
|
|
* type: string
|
|
* example: "507f1f77bcf86cd799439011"
|
|
* userId:
|
|
* type: string
|
|
* example: "507f1f77bcf86cd799439012"
|
|
* tenantId:
|
|
* type: string
|
|
* example: "507f1f77bcf86cd799439013"
|
|
* rut:
|
|
* type: string
|
|
* example: "12345678-9"
|
|
* note:
|
|
* type: string
|
|
* example: "Esta empresa tiene un buen historial crediticio"
|
|
* createdAt:
|
|
* type: string
|
|
* format: date-time
|
|
* example: "2024-03-20T15:30:00Z"
|
|
* updatedAt:
|
|
* type: string
|
|
* format: date-time
|
|
* example: "2024-03-20T15:30:00Z"
|
|
* CreateUserNote:
|
|
* type: object
|
|
* required:
|
|
* - rut
|
|
* - note
|
|
* properties:
|
|
* rut:
|
|
* type: string
|
|
* example: "12345678-9"
|
|
* note:
|
|
* type: string
|
|
* example: "Esta empresa tiene un buen historial crediticio"
|
|
* maxLength: 2000
|
|
* UpdateUserNote:
|
|
* type: object
|
|
* required:
|
|
* - note
|
|
* properties:
|
|
* note:
|
|
* type: string
|
|
* example: "Nota actualizada sobre la empresa"
|
|
* maxLength: 2000
|
|
*/
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/user-notes/rut/{rut}:
|
|
* get:
|
|
* summary: Get all notes for a specific RUT
|
|
* tags: [User Notes]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: rut
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: Company RUT
|
|
* responses:
|
|
* 200:
|
|
* description: List of notes for the RUT
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* type: array
|
|
* items:
|
|
* $ref: '#/components/schemas/UserNote'
|
|
* 400:
|
|
* description: Bad request
|
|
* 401:
|
|
* description: Unauthorized
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/rut/:rut',
|
|
authenticate,
|
|
tenantFilter,
|
|
requirePermission(Permission.RUT_READ),
|
|
UserNoteController.getNotesByRut
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/user-notes:
|
|
* post:
|
|
* summary: Create a new note
|
|
* tags: [User Notes]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* requestBody:
|
|
* required: true
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* $ref: '#/components/schemas/CreateUserNote'
|
|
* responses:
|
|
* 201:
|
|
* description: Note created successfully
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* $ref: '#/components/schemas/UserNote'
|
|
* 400:
|
|
* description: Bad request
|
|
* 401:
|
|
* description: Unauthorized
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.post('/',
|
|
authenticate,
|
|
tenantFilter,
|
|
requirePermission(Permission.RUT_READ),
|
|
UserNoteController.createNote
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/user-notes/{id}:
|
|
* put:
|
|
* summary: Update a note
|
|
* tags: [User Notes]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: Note ID
|
|
* requestBody:
|
|
* required: true
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* $ref: '#/components/schemas/UpdateUserNote'
|
|
* responses:
|
|
* 200:
|
|
* description: Note updated successfully
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* $ref: '#/components/schemas/UserNote'
|
|
* 400:
|
|
* description: Bad request
|
|
* 401:
|
|
* description: Unauthorized
|
|
* 404:
|
|
* description: Note not found
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.put('/:id',
|
|
authenticate,
|
|
tenantFilter,
|
|
requirePermission(Permission.RUT_READ),
|
|
UserNoteController.updateNote
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/user-notes/{id}:
|
|
* delete:
|
|
* summary: Delete a note
|
|
* tags: [User Notes]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: path
|
|
* name: id
|
|
* required: true
|
|
* schema:
|
|
* type: string
|
|
* description: Note ID
|
|
* responses:
|
|
* 200:
|
|
* description: Note deleted successfully
|
|
* 401:
|
|
* description: Unauthorized
|
|
* 404:
|
|
* description: Note not found
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.delete('/:id',
|
|
authenticate,
|
|
tenantFilter,
|
|
requirePermission(Permission.RUT_READ),
|
|
UserNoteController.deleteNote
|
|
);
|
|
|
|
/**
|
|
* @swagger
|
|
* /api/user-notes/user/my-notes:
|
|
* get:
|
|
* summary: Get all notes created by the current user
|
|
* tags: [User Notes]
|
|
* security:
|
|
* - bearerAuth: []
|
|
* parameters:
|
|
* - in: query
|
|
* name: page
|
|
* schema:
|
|
* type: integer
|
|
* default: 1
|
|
* description: Page number
|
|
* - in: query
|
|
* name: limit
|
|
* schema:
|
|
* type: integer
|
|
* default: 10
|
|
* description: Number of items per page
|
|
* responses:
|
|
* 200:
|
|
* description: List of user notes with pagination
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* type: object
|
|
* properties:
|
|
* notes:
|
|
* type: array
|
|
* items:
|
|
* $ref: '#/components/schemas/UserNote'
|
|
* pagination:
|
|
* type: object
|
|
* properties:
|
|
* page:
|
|
* type: integer
|
|
* limit:
|
|
* type: integer
|
|
* total:
|
|
* type: integer
|
|
* pages:
|
|
* type: integer
|
|
* 400:
|
|
* description: Bad request
|
|
* 401:
|
|
* description: Unauthorized
|
|
* 500:
|
|
* description: Internal server error
|
|
*/
|
|
router.get('/user/my-notes',
|
|
authenticate,
|
|
tenantFilter,
|
|
requirePermission(Permission.RUT_READ),
|
|
UserNoteController.getNotesByUser
|
|
);
|
|
|
|
export default router; |