| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- const Joi = require('joi');
- // Symbol validation schemas
- const symbolSchema = Joi.object({
- symbol: Joi.string().max(50).required(),
- baseAsset: Joi.string().max(50),
- quoteAsset: Joi.string().max(50),
- exchange: Joi.string().max(50),
- instrumentType: Joi.string().valid('crypto', 'stock', 'forex', 'commodity', 'index').required(),
- isActive: Joi.boolean().default(true)
- });
- const symbolIdSchema = Joi.object({
- id: Joi.number().integer().positive().required()
- });
- // Candle validation schemas
- const candleSchema = Joi.object({
- symbolId: Joi.number().integer().positive().required(),
- openTime: Joi.date().iso().required(),
- closeTime: Joi.date().iso().required(),
- open: Joi.number().precision(15).required(),
- high: Joi.number().precision(15).required(),
- low: Joi.number().precision(15).required(),
- close: Joi.number().precision(15).required(),
- volume: Joi.number().precision(15).required()
- });
- const candleQuerySchema = Joi.object({
- symbolId: Joi.number().integer().positive().required(),
- startTime: Joi.date().iso(),
- endTime: Joi.date().iso().when('startTime', {
- is: Joi.exist(),
- then: Joi.date().iso().greater(Joi.ref('startTime'))
- }),
- limit: Joi.number().integer().min(1).max(1000).default(100),
- offset: Joi.number().integer().min(0).default(0)
- });
- // Live price validation schemas
- const livePriceSchema = Joi.object({
- symbolId: Joi.number().integer().positive().required(),
- price: Joi.number().precision(15).positive().required(),
- bid: Joi.number().precision(15).positive(),
- ask: Joi.number().precision(15).positive(),
- bidSize: Joi.number().precision(15).positive(),
- askSize: Joi.number().precision(15).positive()
- });
- // Middleware functions
- const validate = (schema) => {
- return (req, res, next) => {
- const { error, value } = schema.validate(req.body, { abortEarly: false });
- if (error) {
- error.isJoi = true;
- return next(error);
- }
- req.body = value;
- next();
- };
- };
- const validateQuery = (schema) => {
- return (req, res, next) => {
- const { error, value } = schema.validate(req.query, { abortEarly: false });
- if (error) {
- error.isJoi = true;
- return next(error);
- }
- req.query = value;
- next();
- };
- };
- const validateParams = (schema) => {
- return (req, res, next) => {
- const { error, value } = schema.validate(req.params, { abortEarly: false });
- if (error) {
- error.isJoi = true;
- return next(error);
- }
- req.params = value;
- next();
- };
- };
- module.exports = {
- symbolSchema,
- symbolIdSchema,
- candleQuerySchema,
- livePriceSchema,
- validate,
- validateQuery,
- validateParams
- };
|