docta-package 1.2.19 → 1.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dto/input/index.d.ts +1 -0
- package/build/dto/input/index.js +1 -0
- package/build/dto/input/period.d.ts +5 -0
- package/build/dto/input/period.js +30 -0
- package/build/dto/output/index.d.ts +1 -0
- package/build/dto/output/index.js +1 -0
- package/build/dto/output/period.d.ts +20 -0
- package/build/dto/output/period.js +34 -0
- package/build/enums/index.d.ts +1 -0
- package/build/enums/index.js +1 -0
- package/build/enums/period.status.d.ts +4 -0
- package/build/enums/period.status.js +8 -0
- package/build/models/index.d.ts +1 -0
- package/build/models/index.js +1 -0
- package/build/models/period.d.ts +23 -0
- package/build/models/period.js +66 -0
- package/package.json +1 -1
package/build/dto/input/index.js
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CreatePeriodDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class CreatePeriodDto {
|
|
15
|
+
}
|
|
16
|
+
exports.CreatePeriodDto = CreatePeriodDto;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsMongoId)(),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], CreatePeriodDto.prototype, "doctorId", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, class_validator_1.IsNumber)(),
|
|
23
|
+
(0, class_validator_1.Min)(0),
|
|
24
|
+
__metadata("design:type", Number)
|
|
25
|
+
], CreatePeriodDto.prototype, "startTime", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_validator_1.IsNumber)(),
|
|
28
|
+
(0, class_validator_1.Min)(0),
|
|
29
|
+
__metadata("design:type", Number)
|
|
30
|
+
], CreatePeriodDto.prototype, "endTime", void 0);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IPeriodDocument } from "../../models";
|
|
2
|
+
import { UserOutputDto } from "./user";
|
|
3
|
+
import { PeriodStatus } from "../../enums/period.status";
|
|
4
|
+
export declare class PeriodOutputDto {
|
|
5
|
+
id: string;
|
|
6
|
+
doctorId: string;
|
|
7
|
+
startTime: number;
|
|
8
|
+
endTime: number;
|
|
9
|
+
status: PeriodStatus;
|
|
10
|
+
isDeleted: boolean;
|
|
11
|
+
createdAt: number;
|
|
12
|
+
updatedAt: number;
|
|
13
|
+
constructor(period: IPeriodDocument);
|
|
14
|
+
}
|
|
15
|
+
export declare class PeriodAdminOutputDto extends PeriodOutputDto {
|
|
16
|
+
createdBy: UserOutputDto | null;
|
|
17
|
+
updatedBy: UserOutputDto | null;
|
|
18
|
+
deletedBy: UserOutputDto | null;
|
|
19
|
+
constructor(period: IPeriodDocument);
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PeriodAdminOutputDto = exports.PeriodOutputDto = void 0;
|
|
4
|
+
const user_1 = require("./user");
|
|
5
|
+
// Base DTO for everyone
|
|
6
|
+
class PeriodOutputDto {
|
|
7
|
+
constructor(period) {
|
|
8
|
+
this.id = period.id.toString();
|
|
9
|
+
this.doctorId = period.doctor.id;
|
|
10
|
+
this.startTime = period.startTime;
|
|
11
|
+
this.endTime = period.endTime;
|
|
12
|
+
this.status = period.status;
|
|
13
|
+
this.isDeleted = period.isDeleted;
|
|
14
|
+
this.createdAt = period.createdAt;
|
|
15
|
+
this.updatedAt = period.updatedAt;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.PeriodOutputDto = PeriodOutputDto;
|
|
19
|
+
// Extended DTO for admin responses
|
|
20
|
+
class PeriodAdminOutputDto extends PeriodOutputDto {
|
|
21
|
+
constructor(period) {
|
|
22
|
+
super(period); // call base constructor
|
|
23
|
+
this.createdBy = period.createdBy
|
|
24
|
+
? new user_1.UserOutputDto(period.createdBy)
|
|
25
|
+
: null;
|
|
26
|
+
this.updatedBy = period.updatedBy
|
|
27
|
+
? new user_1.UserOutputDto(period.updatedBy)
|
|
28
|
+
: null;
|
|
29
|
+
this.deletedBy = period.deletedBy
|
|
30
|
+
? new user_1.UserOutputDto(period.deletedBy)
|
|
31
|
+
: null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.PeriodAdminOutputDto = PeriodAdminOutputDto;
|
package/build/enums/index.d.ts
CHANGED
package/build/enums/index.js
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PeriodStatus = void 0;
|
|
4
|
+
var PeriodStatus;
|
|
5
|
+
(function (PeriodStatus) {
|
|
6
|
+
PeriodStatus["Available"] = "available";
|
|
7
|
+
PeriodStatus["Occupied"] = "occupied";
|
|
8
|
+
})(PeriodStatus || (exports.PeriodStatus = PeriodStatus = {}));
|
package/build/models/index.d.ts
CHANGED
package/build/models/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./faq"), exports);
|
|
|
21
21
|
__exportStar(require("./language"), exports);
|
|
22
22
|
__exportStar(require("./location"), exports);
|
|
23
23
|
__exportStar(require("./patient"), exports);
|
|
24
|
+
__exportStar(require("./period"), exports);
|
|
24
25
|
__exportStar(require("./position"), exports);
|
|
25
26
|
__exportStar(require("./specialty"), exports);
|
|
26
27
|
__exportStar(require("./user"), exports);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Document, Model } from "mongoose";
|
|
2
|
+
import { IBaseModel } from "./base";
|
|
3
|
+
import { IDoctorDocument } from "./doctor";
|
|
4
|
+
import { PeriodStatus } from "../enums/period.status";
|
|
5
|
+
export interface IPeriod extends IBaseModel {
|
|
6
|
+
doctor: IDoctorDocument;
|
|
7
|
+
startTime: number;
|
|
8
|
+
endTime: number;
|
|
9
|
+
status: PeriodStatus;
|
|
10
|
+
}
|
|
11
|
+
export interface IPeriodDocument extends IPeriod, Document {
|
|
12
|
+
}
|
|
13
|
+
export interface IPeriodModel extends Model<IPeriodDocument> {
|
|
14
|
+
}
|
|
15
|
+
export declare const PeriodModel: IPeriodModel;
|
|
16
|
+
/**
|
|
17
|
+
* Validates that the difference between startTime and endTime
|
|
18
|
+
* is one of [15, 30, 60, 90, 120] minutes and startTime < endTime.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Checks if a given period overlaps with any existing period for a doctor.
|
|
22
|
+
* Returns true if overlap exists, false otherwise.
|
|
23
|
+
*/
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PeriodModel = void 0;
|
|
4
|
+
const mongoose_1 = require("mongoose");
|
|
5
|
+
const base_1 = require("./base");
|
|
6
|
+
const doctor_1 = require("./doctor");
|
|
7
|
+
const period_status_1 = require("../enums/period.status");
|
|
8
|
+
const PeriodSchema = new mongoose_1.Schema(Object.assign(Object.assign({}, base_1.BaseSchemaFields), { doctor: {
|
|
9
|
+
type: mongoose_1.Schema.Types.ObjectId,
|
|
10
|
+
ref: doctor_1.DoctorModel.modelName,
|
|
11
|
+
required: true,
|
|
12
|
+
}, startTime: { type: Number, required: true }, endTime: { type: Number, required: true }, status: {
|
|
13
|
+
type: String,
|
|
14
|
+
enum: Object.values(period_status_1.PeriodStatus),
|
|
15
|
+
required: true,
|
|
16
|
+
default: period_status_1.PeriodStatus.Available,
|
|
17
|
+
} }));
|
|
18
|
+
PeriodSchema.plugin(base_1.BaseSchemaPlugin);
|
|
19
|
+
exports.PeriodModel = (0, mongoose_1.model)("Period", PeriodSchema);
|
|
20
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
21
|
+
/**
|
|
22
|
+
* Validates that the difference between startTime and endTime
|
|
23
|
+
* is one of [15, 30, 60, 90, 120] minutes and startTime < endTime.
|
|
24
|
+
*/
|
|
25
|
+
// function isValidTimeGap(startTime: number, endTime: number): boolean {
|
|
26
|
+
// // Ensure startTime < endTime
|
|
27
|
+
// if (endTime <= startTime) return false;
|
|
28
|
+
// // Allowed gaps in minutes
|
|
29
|
+
// const allowedGaps = [15, 30, 60, 90, 120];
|
|
30
|
+
// // Convert milliseconds to minutes
|
|
31
|
+
// const diffInMinutes = (endTime - startTime) / (1000 * 60);
|
|
32
|
+
// // Check if difference matches any allowed gap
|
|
33
|
+
// return allowedGaps.includes(diffInMinutes);
|
|
34
|
+
// }
|
|
35
|
+
/////////////////////////////////////////////////////////////////////////////////////////////
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a given period overlaps with any existing period for a doctor.
|
|
38
|
+
* Returns true if overlap exists, false otherwise.
|
|
39
|
+
*/
|
|
40
|
+
// export async function checkPeriodOverlap(
|
|
41
|
+
// doctorId: string | Types.ObjectId,
|
|
42
|
+
// startTime: number,
|
|
43
|
+
// endTime: number
|
|
44
|
+
// ): Promise<boolean> {
|
|
45
|
+
// const overlappingPeriod = await PeriodModel.findOne({
|
|
46
|
+
// doctor: doctorId,
|
|
47
|
+
// $or: [
|
|
48
|
+
// {
|
|
49
|
+
// // New start is inside an existing period
|
|
50
|
+
// startTime: { $lte: startTime },
|
|
51
|
+
// endTime: { $gt: startTime },
|
|
52
|
+
// },
|
|
53
|
+
// {
|
|
54
|
+
// // New end is inside an existing period
|
|
55
|
+
// startTime: { $lt: endTime },
|
|
56
|
+
// endTime: { $gte: endTime },
|
|
57
|
+
// },
|
|
58
|
+
// {
|
|
59
|
+
// // New period fully covers an existing one
|
|
60
|
+
// startTime: { $gte: startTime },
|
|
61
|
+
// endTime: { $lte: endTime },
|
|
62
|
+
// },
|
|
63
|
+
// ],
|
|
64
|
+
// });
|
|
65
|
+
// return !!overlappingPeriod;
|
|
66
|
+
// }
|