docta-package 1.2.19 → 1.2.20

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.
@@ -7,3 +7,4 @@ export * from "./patient";
7
7
  export * from "./position";
8
8
  export * from "./specialty";
9
9
  export * from "./user";
10
+ export * from "./period";
@@ -23,3 +23,4 @@ __exportStar(require("./patient"), exports);
23
23
  __exportStar(require("./position"), exports);
24
24
  __exportStar(require("./specialty"), exports);
25
25
  __exportStar(require("./user"), exports);
26
+ __exportStar(require("./period"), exports);
@@ -0,0 +1,5 @@
1
+ export declare class CreatePeriodDto {
2
+ doctorId: string;
3
+ startTime: number;
4
+ endTime: number;
5
+ }
@@ -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);
@@ -7,3 +7,4 @@ export * from "./patient";
7
7
  export * from "./position";
8
8
  export * from "./specialty";
9
9
  export * from "./user";
10
+ export * from "./period";
@@ -23,3 +23,4 @@ __exportStar(require("./patient"), exports);
23
23
  __exportStar(require("./position"), exports);
24
24
  __exportStar(require("./specialty"), exports);
25
25
  __exportStar(require("./user"), exports);
26
+ __exportStar(require("./period"), exports);
@@ -0,0 +1,21 @@
1
+ import { IPeriodDocument } from "../../models";
2
+ import { DoctorOutputDto } from "./doctor";
3
+ import { UserOutputDto } from "./user";
4
+ import { PeriodStatus } from "../../enums/period.status";
5
+ export declare class PeriodOutputDto {
6
+ id: string;
7
+ doctor: DoctorOutputDto;
8
+ startTime: number;
9
+ endTime: number;
10
+ status: PeriodStatus;
11
+ isDeleted: boolean;
12
+ createdAt: number;
13
+ updatedAt: number;
14
+ constructor(period: IPeriodDocument);
15
+ }
16
+ export declare class PeriodAdminOutputDto extends PeriodOutputDto {
17
+ createdBy: UserOutputDto | null;
18
+ updatedBy: UserOutputDto | null;
19
+ deletedBy: UserOutputDto | null;
20
+ constructor(period: IPeriodDocument);
21
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PeriodAdminOutputDto = exports.PeriodOutputDto = void 0;
4
+ const doctor_1 = require("./doctor");
5
+ const user_1 = require("./user");
6
+ // Base DTO for everyone
7
+ class PeriodOutputDto {
8
+ constructor(period) {
9
+ this.id = period.id.toString();
10
+ this.doctor = new doctor_1.DoctorOutputDto(period.doctor);
11
+ this.startTime = period.startTime;
12
+ this.endTime = period.endTime;
13
+ this.status = period.status;
14
+ this.isDeleted = period.isDeleted;
15
+ this.createdAt = period.createdAt;
16
+ this.updatedAt = period.updatedAt;
17
+ }
18
+ }
19
+ exports.PeriodOutputDto = PeriodOutputDto;
20
+ // Extended DTO for admin responses
21
+ class PeriodAdminOutputDto extends PeriodOutputDto {
22
+ constructor(period) {
23
+ super(period); // call base constructor
24
+ this.createdBy = period.createdBy
25
+ ? new user_1.UserOutputDto(period.createdBy)
26
+ : null;
27
+ this.updatedBy = period.updatedBy
28
+ ? new user_1.UserOutputDto(period.updatedBy)
29
+ : null;
30
+ this.deletedBy = period.deletedBy
31
+ ? new user_1.UserOutputDto(period.deletedBy)
32
+ : null;
33
+ }
34
+ }
35
+ exports.PeriodAdminOutputDto = PeriodAdminOutputDto;
@@ -5,3 +5,4 @@ export * from "./gender";
5
5
  export * from "./routing-keys";
6
6
  export * from "./exchanges";
7
7
  export * from "./queues";
8
+ export * from "./period.status";
@@ -21,3 +21,4 @@ __exportStar(require("./gender"), exports);
21
21
  __exportStar(require("./routing-keys"), exports);
22
22
  __exportStar(require("./exchanges"), exports);
23
23
  __exportStar(require("./queues"), exports);
24
+ __exportStar(require("./period.status"), exports);
@@ -0,0 +1,4 @@
1
+ export declare enum PeriodStatus {
2
+ Available = "available",
3
+ Occupied = "occupied"
4
+ }
@@ -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 = {}));
@@ -5,6 +5,7 @@ export * from "./faq";
5
5
  export * from "./language";
6
6
  export * from "./location";
7
7
  export * from "./patient";
8
+ export * from "./period";
8
9
  export * from "./position";
9
10
  export * from "./specialty";
10
11
  export * from "./user";
@@ -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
+ // }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docta-package",
3
- "version": "1.2.19",
3
+ "version": "1.2.20",
4
4
  "description": "This package will contail all the required files to run the docta micro-service app",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",