-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCustomController.ts
More file actions
55 lines (50 loc) · 2.04 KB
/
CustomController.ts
File metadata and controls
55 lines (50 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import { Controller } from 'tsoa';
import { EnvVars } from '../setup/EnvVars';
import { ContainerDAO } from '../domain/interfaces/ContainerDAO';
import { DatabaseSession } from '../domain/interfaces/DatabaseSession';
/**
* Base controller class for simple operations without database transactions.
*
* Provides access to environment variables and DAO container. Use this class
* for read-only operations or simple business logic that doesn't require
* transactional database operations.
*/
export abstract class BaseCustomController extends Controller {
/** Environment variables configuration */
protected readonly envVars: EnvVars;
/** Container providing access to all DAO instances */
protected readonly containerDAO: ContainerDAO<unknown>;
/**
* Creates a new base controller instance.
*
* @param envVars - Environment variables configuration
* @param containerDAO - Container providing access to all DAO instances
*/
protected constructor(envVars: EnvVars, containerDAO: ContainerDAO<unknown>) {
super();
this.envVars = envVars;
this.containerDAO = containerDAO;
}
}
/**
* Abstract controller class for operations requiring database transactions.
*
* Extends BaseCustomController with transaction support through a database session.
* Use this class for write operations, complex business logic, or any operation
* that requires atomicity across multiple database operations.
*/
export abstract class TransactionAbstractController extends BaseCustomController {
/** Database session for transaction management */
protected readonly session: DatabaseSession<unknown>;
/**
* Creates a new transaction controller instance.
*
* @param envVars - Environment variables configuration
* @param containerDAO - Container providing access to all DAO instances
* @param session - Database session for transaction management
*/
protected constructor(envVars: EnvVars, containerDAO: ContainerDAO<unknown>, session: DatabaseSession<unknown>) {
super(envVars, containerDAO);
this.session = session;
}
}