nazar-salary 3.3.1 → 3.3.2

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 +102 -0
  2. package/index.js +52 -0
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -1633,10 +1633,112 @@ declare module 'nazar-salary' {
1633
1633
  */
1634
1634
  exportStudentsByManager(managerId: number, month?: string): Promise<ArrayBuffer>;
1635
1635
 
1636
+ // ===== RESALE ENDPOINTS =====
1637
+
1638
+ /** Extend active student course. TASK-001-1 */
1639
+ extendStudentCourse(studentId: number, data: ExtendCourseData): Promise<ExtendCourseResponse>;
1640
+
1641
+ /** Resale course to a completed student. TASK-001-2 */
1642
+ resaleStudentCourse(studentId: number, data: ResaleCourseData): Promise<ResaleCourseResponse>;
1643
+
1644
+ /** Get list of students with resales (Admin only). TASK-001-3 */
1645
+ getResalesStudents(params?: ResalesStudentsParams): Promise<ResalesStudentsResponse>;
1646
+
1636
1647
  // Custom request
1637
1648
  request(method: string, path: string, data?: any): Promise<any>;
1638
1649
  }
1639
1650
 
1651
+ // ===== RESALE TYPES =====
1652
+
1653
+ export interface ExtendCourseData {
1654
+ /** Months to add (1-12) */
1655
+ added_months: number;
1656
+ teacher_id: number;
1657
+ purchase_amount: number;
1658
+ operation_number: string;
1659
+ }
1660
+
1661
+ export interface ExtendCourseResponse {
1662
+ status: 'success';
1663
+ type: 'extension';
1664
+ student_id: number;
1665
+ previous_enrollment_months: number;
1666
+ new_enrollment_months: number;
1667
+ added_months: number;
1668
+ previous_total_lessons: number;
1669
+ new_total_lessons: number;
1670
+ purchase_id: number;
1671
+ resale_history_id: number;
1672
+ created_at: string;
1673
+ }
1674
+
1675
+ export interface ResaleCourseData {
1676
+ price_id: number;
1677
+ teacher_id: number;
1678
+ enrollment_months: number;
1679
+ /** Required for non-individual price formats */
1680
+ group_name?: string;
1681
+ main_course: string;
1682
+ bonus_languages?: string[];
1683
+ purchase_amount: number;
1684
+ operation_number: string;
1685
+ prepayment: boolean;
1686
+ /** Admin only */
1687
+ manager_id?: number;
1688
+ }
1689
+
1690
+ export interface ResaleCourseResponse {
1691
+ status: 'success';
1692
+ type: 'resale';
1693
+ student_id: number;
1694
+ new_student_history_id: number;
1695
+ enrollment_months: number;
1696
+ total_lessons: number;
1697
+ purchase_id: number;
1698
+ resale_history_id: number;
1699
+ created_at: string;
1700
+ }
1701
+
1702
+ export interface ResalesStudentsParams {
1703
+ type?: 'extension' | 'resale';
1704
+ /** Format: YYYY-MM */
1705
+ month?: string;
1706
+ page?: number;
1707
+ /** Max 30 */
1708
+ limit?: number;
1709
+ }
1710
+
1711
+ export interface ResaleStudentItem {
1712
+ resale_id: number;
1713
+ student_id: number;
1714
+ student_name: string;
1715
+ phone: string;
1716
+ type: 'extension' | 'resale';
1717
+ previous_enrollment_months: number | null;
1718
+ new_enrollment_months: number | null;
1719
+ added_months: number | null;
1720
+ purchase_amount: number;
1721
+ manager_id: number;
1722
+ manager_name: string;
1723
+ created_at: string;
1724
+ }
1725
+
1726
+ export interface ResalesStudentsResponse {
1727
+ status: 'success';
1728
+ summary: {
1729
+ total: number;
1730
+ extension_count: number;
1731
+ resale_count: number;
1732
+ };
1733
+ students: ResaleStudentItem[];
1734
+ pagination: {
1735
+ page: number;
1736
+ limit: number;
1737
+ total: number;
1738
+ total_pages: number;
1739
+ };
1740
+ }
1741
+
1640
1742
  export interface TeacherExpensesForecastResponse {
1641
1743
  status: string;
1642
1744
  forecast_metadata: {
package/index.js CHANGED
@@ -1008,6 +1008,58 @@ class SalaryAPI {
1008
1008
  });
1009
1009
  }
1010
1010
 
1011
+ // ===== RESALE ENDPOINTS =====
1012
+
1013
+ /**
1014
+ * Extend active student course (Manager, Admin)
1015
+ * TASK-001-1: extension
1016
+ * @param {number} studentId - Student ID
1017
+ * @param {object} data - Extension data
1018
+ * @param {number} data.added_months - Months to add (1-12)
1019
+ * @param {number} data.teacher_id - Teacher ID
1020
+ * @param {number} data.purchase_amount - Payment amount
1021
+ * @param {string} data.operation_number - Unique operation number
1022
+ * @returns {Promise<ExtendCourseResponse>}
1023
+ */
1024
+ async extendStudentCourse(studentId, data) {
1025
+ return await this.client.post(`/api/v1/students/${studentId}/extend`, data);
1026
+ }
1027
+
1028
+ /**
1029
+ * Resale course to a completed student (Manager, Admin)
1030
+ * TASK-001-2: resale
1031
+ * @param {number} studentId - Student ID
1032
+ * @param {object} data - Resale data
1033
+ * @param {number} data.price_id - Price plan ID
1034
+ * @param {number} data.teacher_id - Teacher ID
1035
+ * @param {number} data.enrollment_months - Enrollment months (1-12)
1036
+ * @param {string} [data.group_name] - Group name (required for non-individual formats)
1037
+ * @param {string} data.main_course - Main course name
1038
+ * @param {string[]} [data.bonus_languages] - Bonus languages
1039
+ * @param {number} data.purchase_amount - Payment amount
1040
+ * @param {string} data.operation_number - Unique operation number
1041
+ * @param {boolean} data.prepayment - Is prepayment
1042
+ * @param {number} [data.manager_id] - Manager ID (Admin only)
1043
+ * @returns {Promise<ResaleCourseResponse>}
1044
+ */
1045
+ async resaleStudentCourse(studentId, data) {
1046
+ return await this.client.post(`/api/v1/students/${studentId}/resale`, data);
1047
+ }
1048
+
1049
+ /**
1050
+ * Get list of students with resales (Admin only)
1051
+ * TASK-001-3
1052
+ * @param {object} [params] - Query parameters
1053
+ * @param {'extension'|'resale'} [params.type] - Filter by resale type
1054
+ * @param {string} [params.month] - Filter by month (YYYY-MM)
1055
+ * @param {number} [params.page=1] - Page number
1056
+ * @param {number} [params.limit=30] - Items per page (max 30)
1057
+ * @returns {Promise<ResalesStudentsResponse>}
1058
+ */
1059
+ async getResalesStudents(params = {}) {
1060
+ return await this.client.get('/api/v1/resales/students', { params });
1061
+ }
1062
+
1011
1063
  // ===== CUSTOM REQUEST =====
1012
1064
 
1013
1065
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nazar-salary",
3
- "version": "3.3.1",
3
+ "version": "3.3.2",
4
4
  "description": "Frontend library for Nazar Salary API",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",