nazar-salary 2.1.1 → 2.3.0

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.
Files changed (3) hide show
  1. package/index.d.ts +103 -3
  2. package/index.js +52 -5
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -472,6 +472,85 @@ declare module 'nazar-salary' {
472
472
  transfer_date: number;
473
473
  }
474
474
 
475
+ export interface LessonGroup {
476
+ lesson_group_id: number;
477
+ lesson_group_name: string;
478
+ students_in_group: number;
479
+ group_capacity: number;
480
+ }
481
+
482
+ export interface LessonGroupsResponse {
483
+ available_groups: LessonGroup[];
484
+ }
485
+
486
+ export interface StudentCourse {
487
+ price_id: number;
488
+ teacher_id: number;
489
+ enrollment_months: number;
490
+ total_lessons: number;
491
+ main_course: string;
492
+ group_type: GroupType;
493
+ lessons_per_month: number;
494
+ rate_per_lesson: number;
495
+ lesson_group_id: number | null;
496
+ }
497
+
498
+ export interface CreateStudentResponse {
499
+ id: number;
500
+ first_name: string;
501
+ last_name: string;
502
+ phone: string;
503
+ age: number;
504
+ created_at: number;
505
+ purchase_amount: number;
506
+ operation_number: string;
507
+ is_verified: boolean;
508
+ verified_at: number | null;
509
+ prepayment: boolean;
510
+ completed_lessons: number;
511
+ owned_by: number;
512
+ group_name: string;
513
+ bonus_languages: string[] | null;
514
+ course: StudentCourse;
515
+ }
516
+
517
+ export interface UpdateStudentResponse {
518
+ student: {
519
+ id: number;
520
+ first_name: string;
521
+ last_name: string;
522
+ phone: string;
523
+ age: number;
524
+ operation_numbers: string[];
525
+ purchase_amounts: number[];
526
+ prepayment: boolean;
527
+ group_name: string;
528
+ main_course: string;
529
+ bonus_languages: string[] | null;
530
+ group_type: GroupType;
531
+ lessons_per_month: number;
532
+ duration_minutes: number;
533
+ rate_per_lesson: number;
534
+ updated_at: number;
535
+ };
536
+ current_course: {
537
+ price_id: number;
538
+ teacher_id: number;
539
+ enrollment_months: number;
540
+ total_lessons: number;
541
+ completed_lessons: number;
542
+ };
543
+ payments: {
544
+ id: number;
545
+ operation_number: string;
546
+ purchase_amount: number;
547
+ is_verified: boolean;
548
+ verified_at: number | null;
549
+ created_at: number;
550
+ }[];
551
+ total_purchase_amount: number;
552
+ }
553
+
475
554
  export interface CreateStudentData {
476
555
  first_name: string;
477
556
  last_name: string;
@@ -486,6 +565,7 @@ declare module 'nazar-salary' {
486
565
  main_course: string;
487
566
  prepayment: boolean;
488
567
  bonus_languages?: string[];
568
+ lesson_group_id?: number;
489
569
  }
490
570
 
491
571
  export interface UpdateStudentData {
@@ -505,6 +585,23 @@ declare module 'nazar-salary' {
505
585
  main_course?: string;
506
586
  }
507
587
 
588
+ export interface ChangeStudentManagerData {
589
+ new_manager_id: number;
590
+ }
591
+
592
+ export interface ChangeStudentManagerResponse {
593
+ student_id: number;
594
+ old_manager: {
595
+ id: number;
596
+ name: string;
597
+ };
598
+ new_manager: {
599
+ id: number;
600
+ name: string;
601
+ };
602
+ reassigned_at: number;
603
+ }
604
+
508
605
  export interface StudentBasicInfo {
509
606
  id: number;
510
607
  first_name: string;
@@ -649,7 +746,7 @@ declare module 'nazar-salary' {
649
746
  }
650
747
 
651
748
  /** @deprecated Use StudentsListParams instead */
652
- export interface ManagerStudentsParams extends Omit<StudentsListParams, 'manager_id'> {}
749
+ export interface ManagerStudentsParams extends Omit<StudentsListParams, 'manager_id'> { }
653
750
 
654
751
  /** @deprecated Use StudentsListResponse instead */
655
752
  export interface ManagerStudentsResponse extends StudentsListResponse {
@@ -709,6 +806,7 @@ declare module 'nazar-salary' {
709
806
  addManualPayment(data: ManualPaymentData): Promise<ManualPaymentResponse>;
710
807
  getOrphanPayments(params?: { page?: number; limit?: number }): Promise<OrphanPaymentsResponse>;
711
808
  getBanksConfig(): Promise<BanksConfigResponse>;
809
+ getManagerStudentsAdmin(managerId: number, params?: StudentsListParams): Promise<StudentsListResponse>;
712
810
 
713
811
  // Teacher endpoints
714
812
  getTeacherLanguages(): Promise<TeacherLanguagesResponse>;
@@ -727,9 +825,11 @@ declare module 'nazar-salary' {
727
825
  getPricesList(): Promise<PricesResponse>;
728
826
 
729
827
  // Student endpoints
730
- createStudent(data: CreateStudentData): Promise<Student>;
731
- updateStudent(studentId: number, data: UpdateStudentData): Promise<UpdatedStudent>;
828
+ createStudent(data: CreateStudentData): Promise<CreateStudentResponse>;
829
+ getLessonGroups(): Promise<LessonGroupsResponse>;
830
+ updateStudent(studentId: number, data: UpdateStudentData): Promise<UpdateStudentResponse>;
732
831
  transferStudent(studentId: number, data: TransferStudentData): Promise<TransferResponse>;
832
+ changeStudentManager(studentId: number, data: ChangeStudentManagerData): Promise<ChangeStudentManagerResponse>;
733
833
  getStudent(studentId: number): Promise<StudentDetail>;
734
834
  searchStudents(params: SearchStudentsParams): Promise<SearchStudentsResponse>;
735
835
  getStudentsList(params?: StudentsListParams): Promise<StudentsListResponse>;
package/index.js CHANGED
@@ -189,13 +189,14 @@ class SalaryAPI {
189
189
  */
190
190
  async uploadKaspiReceipt(file, options = {}) {
191
191
  const formData = new FormData();
192
- formData.append('file', file);
193
- if (options.period_from) formData.append('period_from', options.period_from);
194
- if (options.period_to) formData.append('period_to', options.period_to);
192
+ formData.append("file", file);
193
+ if (options.period_from)
194
+ formData.append("period_from", options.period_from);
195
+ if (options.period_to) formData.append("period_to", options.period_to);
195
196
 
196
197
  return await this.client.post("/api/v1/admin/receipts/upload", formData, {
197
198
  headers: {
198
- 'Content-Type': 'multipart/form-data',
199
+ "Content-Type": "multipart/form-data",
199
200
  },
200
201
  });
201
202
  }
@@ -256,6 +257,26 @@ class SalaryAPI {
256
257
  return await this.client.get("/api/v1/admin/receipts/banks");
257
258
  }
258
259
 
260
+ /**
261
+ * Get students of specific manager (Admin only)
262
+ * @param {number} managerId - Manager ID
263
+ * @param {object} [params] - Filter parameters
264
+ * @param {boolean} [params.prepayment] - Filter by prepayment status
265
+ * @param {boolean} [params.is_verified] - Filter by verification status
266
+ * @param {number} [params.teacher_id] - Filter by teacher ID
267
+ * @param {number} [params.price_id] - Filter by price ID
268
+ * @param {boolean} [params.is_deleted] - Filter by deletion status
269
+ * @param {string} [params.created_from] - Filter by created date from (ISO 8601)
270
+ * @param {string} [params.created_to] - Filter by created date to (ISO 8601)
271
+ * @param {string} [params.main_course] - Filter by main course
272
+ * @param {number} [params.page=1] - Page number
273
+ * @param {number} [params.limit=30] - Items per page (max 30)
274
+ * @returns {Promise<{manager: object, total_students: number, current_page: number, total_pages: number, students: array}>}
275
+ */
276
+ async getManagerStudentsAdmin(managerId, params = {}) {
277
+ return await this.client.get(`/api/v1/admin/managers/${managerId}/students`, { params });
278
+ }
279
+
259
280
  // ===== TEACHER ENDPOINTS =====
260
281
 
261
282
  /**
@@ -418,12 +439,21 @@ class SalaryAPI {
418
439
  * @param {string} data.main_course - Main course
419
440
  * @param {boolean} data.prepayment - Prepayment flag
420
441
  * @param {string[]} [data.bonus_languages] - Bonus languages array
442
+ * @param {number} [data.lesson_group_id] - Lesson group ID for duet/trio (optional)
421
443
  * @returns {Promise<object>}
422
444
  */
423
445
  async createStudent(data) {
424
446
  return await this.client.post("/api/v1/student/new", data);
425
447
  }
426
448
 
449
+ /**
450
+ * Get available lesson groups for duet/trio (requireAuth)
451
+ * @returns {Promise<{available_groups: Array<{lesson_group_id: number, lesson_group_name: string, students_in_group: number, group_capacity: number}>}>}
452
+ */
453
+ async getLessonGroups() {
454
+ return await this.client.get("/api/v1/student/lesson-groups");
455
+ }
456
+
427
457
  /**
428
458
  * Update student (requireAuth)
429
459
  * @param {number} studentId - Student ID
@@ -452,7 +482,24 @@ class SalaryAPI {
452
482
  * @returns {Promise<object>}
453
483
  */
454
484
  async transferStudent(studentId, data) {
455
- return await this.client.post(`/api/v1/student/${studentId}/transfer`, data);
485
+ return await this.client.post(
486
+ `/api/v1/student/${studentId}/transfer`,
487
+ data,
488
+ );
489
+ }
490
+
491
+ /**
492
+ * Change student manager (Admin only)
493
+ * @param {number} studentId - Student ID
494
+ * @param {object} data - Change manager data
495
+ * @param {number} data.new_manager_id - New manager user ID
496
+ * @returns {Promise<{student_id: number, old_manager: object, new_manager: object, reassigned_at: number}>}
497
+ */
498
+ async changeStudentManager(studentId, data) {
499
+ return await this.client.post(
500
+ `/api/v1/student/${studentId}/change-manager`,
501
+ data,
502
+ );
456
503
  }
457
504
 
458
505
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nazar-salary",
3
- "version": "2.1.1",
3
+ "version": "2.3.0",
4
4
  "description": "Frontend library for Nazar Salary API",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",