// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from '../types.js'
*/
/**
* Event Job Template Router
*
* Manages job templates for events. Job templates define roles/functions
* that can be assigned to people in events, including qualifications,
* permissions, and display settings.
*
* @swagger
* components:
* schemas:
* EventJobTemplate:
* type: object
* properties:
* UID:
* type: string
* format: uuid
* Display:
* type: string
* SortName:
* type: string
* Data:
* type: object
* properties:
* name:
* type: string
* qualification:
* type: object
* responsible:
* type: boolean
* visible:
* type: boolean
* role:
* type: boolean
* mandatory:
* type: boolean
*
* tags:
* - name: Event Job Templates
* description: Event job template management
*/
import express from 'express';
import { checkAdmin } from '../utils/authChecks.js';
import * as eventJobTemplateController from './eventJobTemplate/controller.js';
/** @type {express.Express} */
const api = express();
// Export helper functions for use by other modules
export { extractAchievements } from './eventJobTemplate/service.js';
/**
* @swagger
* /api/eventJobTemplate/{UIDeventTemplate}:
* put:
* summary: Create or update a job template
* description: Creates or updates a job template for an event template. Includes qualification requirements and role settings.
* tags:
* - Event Job Templates
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: UIDeventTemplate
* required: true
* schema:
* type: string
* format: uuid
* description: Event template UID
* - in: query
* name: requalify
* schema:
* type: string
* enum: ['0', '1']
* description: Whether to requalify existing jobs (1=yes, 0=no)
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* required:
* - name
* properties:
* name:
* type: string
* description: Job template name
* qualification:
* type: object
* description: Qualification filter object
* responsible:
* type: boolean
* description: Is this a responsible/admin role
* visible:
* type: boolean
* description: Is this role visible to all
* role:
* type: boolean
* description: Is this a role assignment
* mandatory:
* type: boolean
* description: Is this a mandatory job
* responses:
* 200:
* description: Job template created or updated successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* result:
* $ref: '#/components/schemas/EventJobTemplate'
*/
// @ts-ignore
api.put('/:UIDeventTemplate', checkAdmin, eventJobTemplateController.createOrUpdateJobTemplateController);
/**
* @swagger
* /api/eventJobTemplate/{UID}:
* delete:
* summary: Delete a job template
* description: Deletes a job template and all associated qualification links
* tags:
* - Event Job Templates
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: UID
* required: true
* schema:
* type: string
* format: uuid
* description: Job template UID to delete
* responses:
* 200:
* description: Job template deleted successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
*/
// @ts-ignore
api.delete('/:UID', checkAdmin, eventJobTemplateController.deleteJobTemplateController);
/**
* @swagger
* /api/eventJobTemplate/eventJobs/{UID}:
* get:
* summary: Get all jobs for a function template
* description: Retrieves all job assignments based on a specific function template
* tags:
* - Event Job Templates
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: UID
* required: true
* schema:
* type: string
* format: uuid
* description: Function template UID
* - in: query
* name: Timestamp
* schema:
* type: string
* format: date-time
* description: Historical timestamp for temporal queries
* - in: query
* name: Data
* schema:
* type: string
* description: JSON array of data fields to retrieve (path and alias)
* - in: query
* name: groupBanner
* schema:
* type: boolean
* description: Include group banner in results
* responses:
* 200:
* description: Jobs retrieved successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* result:
* type: array
* items:
* type: object
*/
// @ts-ignore
api.get('/eventJobs/:UID', eventJobTemplateController.getEventJobsController);
/**
* @swagger
* /api/eventJobTemplate/{UID}:
* get:
* summary: Get all function template names and UIDs
* description: Retrieves basic information (UID, Display, SortName) for all job templates of an event template
* tags:
* - Event Job Templates
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: UID
* required: true
* schema:
* type: string
* format: uuid
* description: Event template UID
* responses:
* 200:
* description: Template list retrieved successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* result:
* type: array
* items:
* type: object
* properties:
* UID:
* type: string
* format: uuid
* Display:
* type: string
* SortName:
* type: string
*/
// @ts-ignore
api.get('/:UID', eventJobTemplateController.getJobTemplatesController);
/**
* @swagger
* /api/eventJobTemplate/Data/{UID}:
* get:
* summary: Get all function templates with full data
* description: Retrieves complete information including Data field for all job templates of an event template
* tags:
* - Event Job Templates
* security:
* - bearerAuth: []
* parameters:
* - in: path
* name: UID
* required: true
* schema:
* type: string
* format: uuid
* description: Event template UID
* responses:
* 200:
* description: Templates with data retrieved successfully
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* result:
* type: array
* items:
* $ref: '#/components/schemas/EventJobTemplate'
*/
// @ts-ignore
api.get('/Data/:UID', eventJobTemplateController.getJobTemplatesWithDataController);
export default api;