rotacloud 1.0.4 → 1.0.7

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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/interfaces/leave.interface.d.ts +4 -4
  3. package/dist/models/group.model.d.ts +1 -0
  4. package/dist/models/group.model.js +1 -0
  5. package/dist/models/leave.model.d.ts +22 -0
  6. package/dist/models/leave.model.js +20 -0
  7. package/dist/models/role.model.d.ts +1 -0
  8. package/dist/models/role.model.js +1 -0
  9. package/dist/rotacloud.d.ts +2 -3
  10. package/dist/rotacloud.js +4 -5
  11. package/dist/services/accounts.service.d.ts +0 -1
  12. package/dist/services/accounts.service.js +1 -1
  13. package/dist/services/attendance.service.d.ts +0 -1
  14. package/dist/services/attendance.service.js +1 -1
  15. package/dist/services/groups.service.d.ts +37 -0
  16. package/dist/services/groups.service.js +36 -0
  17. package/dist/services/index.d.ts +2 -0
  18. package/dist/services/index.js +2 -0
  19. package/dist/services/leave-embargoes.service.d.ts +0 -1
  20. package/dist/services/leave-embargoes.service.js +1 -1
  21. package/dist/services/leave.service.d.ts +0 -1
  22. package/dist/services/leave.service.js +1 -1
  23. package/dist/services/locations.service.d.ts +0 -1
  24. package/dist/services/locations.service.js +1 -1
  25. package/dist/services/roles.service.d.ts +0 -1
  26. package/dist/services/roles.service.js +1 -1
  27. package/dist/services/service.js +5 -5
  28. package/dist/services/shifts.service.d.ts +0 -1
  29. package/dist/services/shifts.service.js +1 -1
  30. package/dist/services/users.service.d.ts +0 -1
  31. package/dist/services/users.service.js +1 -1
  32. package/dist/version.js +1 -1
  33. package/package.json +1 -1
  34. package/src/interfaces/leave.interface.ts +4 -4
  35. package/src/models/group.model.ts +2 -0
  36. package/src/models/leave.model.ts +40 -0
  37. package/src/models/role.model.ts +3 -0
  38. package/src/rotacloud.ts +4 -4
  39. package/src/services/accounts.service.ts +0 -4
  40. package/src/services/attendance.service.ts +0 -4
  41. package/src/services/groups.service.ts +79 -0
  42. package/src/services/index.ts +2 -0
  43. package/src/services/leave-embargoes.service.ts +0 -4
  44. package/src/services/leave.service.ts +0 -4
  45. package/src/services/locations.service.ts +0 -4
  46. package/src/services/roles.service.ts +0 -4
  47. package/src/services/service.ts +5 -5
  48. package/src/services/shifts.service.ts +0 -4
  49. package/src/services/users.service.ts +0 -4
  50. package/src/version.ts +1 -1
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Configuration is simple, just import the core rotacloud.js SDK and supply your API key as necessary.
6
6
 
7
7
  ```typescript
8
- import { Rotacloud } from 'rotacloud';
8
+ import { RotaCloud } from 'rotacloud';
9
9
 
10
10
  const rc = new Rotacloud({
11
11
  apiKey: 'YOUR_API_KEY',
@@ -2,15 +2,15 @@ import { ApiLeaveDate } from './index.js';
2
2
  export interface ApiLeave {
3
3
  id: number;
4
4
  deleted: boolean;
5
- deleted_at: number;
6
- deleted_by: number;
5
+ deleted_at: number | null;
6
+ deleted_by: number | null;
7
7
  type: number;
8
8
  user: number;
9
9
  admin: number;
10
10
  status: string;
11
11
  requested: boolean;
12
- user_message: string;
13
- admin_message: string;
12
+ user_message: string | null;
13
+ admin_message: string | null;
14
14
  start_date: string;
15
15
  start_am_pm: string;
16
16
  end_date: string;
@@ -2,5 +2,6 @@ import { ApiGroup } from '../interfaces/index.js';
2
2
  export declare class Group {
3
3
  id: number;
4
4
  name: string;
5
+ users: number[];
5
6
  constructor(group: ApiGroup);
6
7
  }
@@ -2,5 +2,6 @@ export class Group {
2
2
  constructor(group) {
3
3
  this.id = group.id;
4
4
  this.name = group.name;
5
+ this.users = group.users;
5
6
  }
6
7
  }
@@ -1,6 +1,28 @@
1
1
  import { ApiLeave, ApiLeaveDate } from '../interfaces/index.js';
2
2
  export declare class Leave {
3
3
  id: number;
4
+ type: number;
5
+ user: number;
6
+ start_date: string;
7
+ end_date: string;
4
8
  dates: ApiLeaveDate[];
9
+ paid: boolean;
10
+ status: string;
11
+ requested: boolean;
12
+ admin_message: string | null;
13
+ user_message: string | null;
14
+ deleted: boolean;
15
+ deleted_at: number | null;
16
+ deleted_by: number | null;
17
+ admin: number;
18
+ start_am_pm: string;
19
+ end_am_pm: string;
20
+ hours: {
21
+ [key: string]: number;
22
+ };
23
+ hours_method: string;
24
+ hours_set: boolean;
25
+ requested_at: number;
26
+ replied_at: number;
5
27
  constructor(leave: ApiLeave);
6
28
  }
@@ -1,6 +1,26 @@
1
1
  export class Leave {
2
2
  constructor(leave) {
3
3
  this.id = leave.id;
4
+ this.type = leave.type;
4
5
  this.dates = leave.dates;
6
+ this.user = leave.user;
7
+ this.start_date = leave.start_date;
8
+ this.end_date = leave.end_date;
9
+ this.paid = leave.paid;
10
+ this.status = leave.status;
11
+ this.requested = leave.requested;
12
+ this.admin_message = leave.admin_message;
13
+ this.user_message = leave.user_message;
14
+ this.deleted = leave.deleted;
15
+ this.deleted_at = leave.deleted_at;
16
+ this.deleted_by = leave.deleted_by;
17
+ this.admin = leave.admin;
18
+ this.start_am_pm = leave.start_am_pm;
19
+ this.end_am_pm = leave.end_am_pm;
20
+ this.hours = leave.hours;
21
+ this.hours_method = leave.hours_method;
22
+ this.hours_set = leave.hours_set;
23
+ this.requested_at = leave.requested_at;
24
+ this.replied_at = leave.replied_at;
5
25
  }
6
26
  }
@@ -3,5 +3,6 @@ export declare class Role {
3
3
  id: number;
4
4
  name: string;
5
5
  colour: string;
6
+ users: number[];
6
7
  constructor(role: ApiRole);
7
8
  }
@@ -2,5 +2,6 @@ export class Role {
2
2
  constructor(role) {
3
3
  this.id = role.id;
4
4
  this.name = role.name;
5
+ this.users = role.users;
5
6
  }
6
7
  }
@@ -1,7 +1,6 @@
1
- import { AccountsService, AttendanceService, LeaveEmbargoesService, LeaveRequestService, LeaveService, LocationsService, RolesService, ShiftsService, UsersService } from './services/index.js';
1
+ import { AccountsService, AttendanceService, DaysOffService, LeaveEmbargoesService, LeaveRequestService, LeaveService, LocationsService, RolesService, ShiftsService, UsersService } from './services/index.js';
2
2
  import { SDKConfig } from './interfaces/index.js';
3
- import { DaysOffService } from './services/days-off.service.js';
4
- export declare class Rotacloud {
3
+ export declare class RotaCloud {
5
4
  static config: SDKConfig;
6
5
  defaultAPIURI: string;
7
6
  accounts: AccountsService;
package/dist/rotacloud.js CHANGED
@@ -1,6 +1,5 @@
1
- import { AccountsService, AttendanceService, LeaveEmbargoesService, LeaveRequestService, LeaveService, LocationsService, RolesService, ShiftsService, UsersService, } from './services/index.js';
2
- import { DaysOffService } from './services/days-off.service.js';
3
- export class Rotacloud {
1
+ import { AccountsService, AttendanceService, DaysOffService, LeaveEmbargoesService, LeaveRequestService, LeaveService, LocationsService, RolesService, ShiftsService, UsersService, } from './services/index.js';
2
+ export class RotaCloud {
4
3
  constructor(config) {
5
4
  this.defaultAPIURI = 'https://api.rotacloud.com/v1';
6
5
  this.accounts = new AccountsService();
@@ -19,9 +18,9 @@ export class Rotacloud {
19
18
  this.config = config;
20
19
  }
21
20
  get config() {
22
- return Rotacloud.config;
21
+ return RotaCloud.config;
23
22
  }
24
23
  set config(configVal) {
25
- Rotacloud.config = configVal;
24
+ RotaCloud.config = configVal;
26
25
  }
27
26
  }
@@ -4,7 +4,6 @@ import { ApiAccount } from '../interfaces/index.js';
4
4
  import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
5
5
  declare class AccountsService extends Service {
6
6
  private apiPath;
7
- constructor();
8
7
  list(options?: Options<InternalQueryParams>): AsyncGenerator<Account, void, unknown>;
9
8
  listByPage(options?: Options<InternalQueryParams>): AsyncGenerator<import("axios").AxiosResponse<ApiAccount[], any>, any, unknown>;
10
9
  }
@@ -2,7 +2,7 @@ import { Account } from '../models/account.model.js';
2
2
  import { Service } from './index.js';
3
3
  class AccountsService extends Service {
4
4
  constructor() {
5
- super();
5
+ super(...arguments);
6
6
  this.apiPath = '/accounts';
7
7
  }
8
8
  async *list(options) {
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'user' | 'in_time';
8
8
  declare class AttendanceService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiAttendance, RequiredProps>): Promise<Attendance>;
12
11
  create(data: RequirementsOf<ApiAttendance, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { Attendance } from '../models/attendance.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class AttendanceService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/attendance';
8
8
  }
9
9
  create(data, options) {
@@ -0,0 +1,37 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiGroup } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
5
+ import { Group } from '../models/group.model.js';
6
+ import { GroupsQueryParams } from '../interfaces/query-params/groups-query-params.interface.js';
7
+ declare type RequiredProps = 'name';
8
+ declare class GroupsService extends Service {
9
+ private apiPath;
10
+ create(data: RequirementsOf<ApiGroup, RequiredProps>): Promise<Group>;
11
+ create(data: RequirementsOf<ApiGroup, RequiredProps>, options: {
12
+ rawResponse: true;
13
+ params?: InternalQueryParams;
14
+ }): Promise<AxiosResponse<ApiGroup, any>>;
15
+ create(data: RequirementsOf<ApiGroup, RequiredProps>, options: Options<InternalQueryParams>): Promise<Group>;
16
+ get(id: number): Promise<Group>;
17
+ get(id: number, options: {
18
+ rawResponse: true;
19
+ params?: InternalQueryParams;
20
+ }): Promise<AxiosResponse<ApiGroup, any>>;
21
+ get(id: number, options: Options<InternalQueryParams>): Promise<Group>;
22
+ list(options?: Options<GroupsQueryParams & InternalQueryParams>): AsyncGenerator<Group, void, unknown>;
23
+ listByPage(options?: Options<GroupsQueryParams & InternalQueryParams>): AsyncGenerator<AxiosResponse<ApiGroup[], any>, any, unknown>;
24
+ update(id: number, data: Partial<ApiGroup>): Promise<Group>;
25
+ update(id: number, data: Partial<ApiGroup>, options: {
26
+ rawResponse: true;
27
+ params?: InternalQueryParams;
28
+ }): Promise<AxiosResponse<ApiGroup, any>>;
29
+ update(id: number, data: Partial<ApiGroup>, options: Options<InternalQueryParams>): Promise<Group>;
30
+ delete(id: number): Promise<number>;
31
+ delete(id: number, options: {
32
+ rawResponse: true;
33
+ params?: InternalQueryParams;
34
+ }): Promise<AxiosResponse<any, any>>;
35
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
36
+ }
37
+ export { GroupsService };
@@ -0,0 +1,36 @@
1
+ import { Service } from './index.js';
2
+ import { ErrorResponse } from '../models/error-response.model.js';
3
+ import { Group } from '../models/group.model.js';
4
+ class GroupsService extends Service {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.apiPath = '/groups';
8
+ }
9
+ create(data, options) {
10
+ return super.fetch({ url: this.apiPath, data, method: 'POST' }).then((res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
11
+ }
12
+ get(id, options) {
13
+ return super.fetch({ url: `${this.apiPath}/${id}` }, options).then((res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
14
+ }
15
+ async *list(options) {
16
+ for await (const res of super.iterator({ url: this.apiPath }, options)) {
17
+ yield new Group(res);
18
+ }
19
+ }
20
+ listByPage(options) {
21
+ return super.iterator({ url: this.apiPath }, options).byPage();
22
+ }
23
+ update(id, data, options) {
24
+ return super
25
+ .fetch({
26
+ url: `${this.apiPath}/${id}`,
27
+ data,
28
+ method: 'POST',
29
+ })
30
+ .then((res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
31
+ }
32
+ delete(id, options) {
33
+ return super.fetch({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then((res) => Promise.resolve(options?.rawResponse ? res : res.status), (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err)));
34
+ }
35
+ }
36
+ export { GroupsService };
@@ -1,6 +1,8 @@
1
1
  export * from './service.js';
2
2
  export * from './accounts.service.js';
3
3
  export * from './attendance.service.js';
4
+ export * from './days-off.service.js';
5
+ export * from './groups.service.js';
4
6
  export * from './leave-request.service.js';
5
7
  export * from './leave-embargoes.service.js';
6
8
  export * from './leave.service.js';
@@ -1,6 +1,8 @@
1
1
  export * from './service.js';
2
2
  export * from './accounts.service.js';
3
3
  export * from './attendance.service.js';
4
+ export * from './days-off.service.js';
5
+ export * from './groups.service.js';
4
6
  export * from './leave-request.service.js';
5
7
  export * from './leave-embargoes.service.js';
6
8
  export * from './leave.service.js';
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'start_date' | 'end_date' | 'users';
8
8
  declare class LeaveEmbargoesService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiLeaveEmbargo, RequiredProps>): Promise<LeaveEmbargo>;
12
11
  create(data: RequirementsOf<ApiLeaveEmbargo, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { LeaveEmbargo } from '../models/leave-embargo.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class LeaveEmbargoesService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/leave_embargoes';
8
8
  }
9
9
  create(data, options) {
@@ -8,7 +8,6 @@ import { LeaveType } from '../models/leave-type.model.js';
8
8
  declare type RequiredProps = 'users' | 'type' | 'start_date' | 'end_date';
9
9
  declare class LeaveService extends Service {
10
10
  private apiPath;
11
- constructor();
12
11
  create(data: RequirementsOf<ApiLeave, RequiredProps>): Promise<Leave[]>;
13
12
  create(data: RequirementsOf<ApiLeave, RequiredProps>, options: {
14
13
  rawResponse: true;
@@ -4,7 +4,7 @@ import { ErrorResponse } from '../models/error-response.model.js';
4
4
  import { LeaveType } from '../models/leave-type.model.js';
5
5
  class LeaveService extends Service {
6
6
  constructor() {
7
- super();
7
+ super(...arguments);
8
8
  this.apiPath = '/leave';
9
9
  }
10
10
  create(data, options) {
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'name';
8
8
  declare class LocationsService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiLocation, RequiredProps>): Promise<Location>;
12
11
  create(data: RequirementsOf<ApiLocation, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { Location } from '../models/location.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class LocationsService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/locations';
8
8
  }
9
9
  create(data, options) {
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'name';
8
8
  declare class RolesService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiRole, RequiredProps>): Promise<Role>;
12
11
  create(data: RequirementsOf<ApiRole, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { Role } from '../models/role.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class RolesService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/roles';
8
8
  }
9
9
  create(data, options) {
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { Rotacloud } from '../rotacloud.js';
2
+ import { RotaCloud } from '../rotacloud.js';
3
3
  import { Version } from '../version.js';
4
4
  export class Service {
5
5
  // rate limit tracking could be implemented here statically
@@ -31,11 +31,11 @@ export class Service {
31
31
  }
32
32
  async fetch(httpOptions, options) {
33
33
  const headers = {
34
- Authorization: `Bearer ${Rotacloud.config.apiKey}`,
34
+ Authorization: `Bearer ${RotaCloud.config.apiKey}`,
35
35
  'SDK-Version': Version.version,
36
36
  };
37
- if (Rotacloud.config.accountId) {
38
- headers.Account = String(Rotacloud.config.accountId);
37
+ if (RotaCloud.config.accountId) {
38
+ headers.Account = String(RotaCloud.config.accountId);
39
39
  }
40
40
  else {
41
41
  // need to convert user field in payload to a header for creating leave_requests when using an API key
@@ -43,7 +43,7 @@ export class Service {
43
43
  }
44
44
  const reqObject = {
45
45
  ...httpOptions,
46
- baseURL: Rotacloud.config.baseUri,
46
+ baseURL: RotaCloud.config.baseUri,
47
47
  headers,
48
48
  params: options?.params,
49
49
  paramsSerializer: (params) => {
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'end_time' | 'start_time' | 'location';
8
8
  declare class ShiftsService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiShift, RequiredProps>): Promise<Shift>;
12
11
  create(data: RequirementsOf<ApiShift, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { Shift } from '../models/shift.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class ShiftsService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/shifts';
8
8
  }
9
9
  create(data, options) {
@@ -7,7 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  declare type RequiredProps = 'first_name' | 'last_name';
8
8
  declare class UsersService extends Service {
9
9
  private apiPath;
10
- constructor();
11
10
  create(data: RequirementsOf<ApiUser, RequiredProps>): Promise<User>;
12
11
  create(data: RequirementsOf<ApiUser, RequiredProps>, options: {
13
12
  rawResponse: true;
@@ -3,7 +3,7 @@ import { User } from '../models/user.model.js';
3
3
  import { ErrorResponse } from '../models/error-response.model.js';
4
4
  class UsersService extends Service {
5
5
  constructor() {
6
- super();
6
+ super(...arguments);
7
7
  this.apiPath = '/users';
8
8
  }
9
9
  create(data, options) {
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const Version = { version: "1.0.4" };
1
+ export const Version = { version: "1.0.7" };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rotacloud",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "description": "The RotaCloud SDK for the RotaCloud API",
5
5
  "engines": {
6
6
  "node": ">=14.17.0"
@@ -3,15 +3,15 @@ import { ApiLeaveDate } from './index.js';
3
3
  export interface ApiLeave {
4
4
  id: number;
5
5
  deleted: boolean;
6
- deleted_at: number;
7
- deleted_by: number;
6
+ deleted_at: number | null;
7
+ deleted_by: number | null;
8
8
  type: number;
9
9
  user: number;
10
10
  admin: number;
11
11
  status: string;
12
12
  requested: boolean;
13
- user_message: string;
14
- admin_message: string;
13
+ user_message: string | null;
14
+ admin_message: string | null;
15
15
  start_date: string;
16
16
  start_am_pm: string;
17
17
  end_date: string;
@@ -3,9 +3,11 @@ import { ApiGroup } from '../interfaces/index.js';
3
3
  export class Group {
4
4
  public id: number;
5
5
  public name: string;
6
+ public users: number[];
6
7
 
7
8
  constructor(group: ApiGroup) {
8
9
  this.id = group.id;
9
10
  this.name = group.name;
11
+ this.users = group.users;
10
12
  }
11
13
  }
@@ -2,10 +2,50 @@ import { ApiLeave, ApiLeaveDate } from '../interfaces/index.js';
2
2
 
3
3
  export class Leave {
4
4
  public id: number;
5
+ public type: number;
6
+ public user: number;
7
+ public start_date: string;
8
+ public end_date: string;
5
9
  public dates: ApiLeaveDate[];
10
+ public paid: boolean;
11
+ public status: string;
12
+ public requested: boolean;
13
+ public admin_message: string | null;
14
+ public user_message: string | null;
15
+ public deleted: boolean;
16
+ public deleted_at: number | null;
17
+ public deleted_by: number | null;
18
+ public admin: number;
19
+ public start_am_pm: string;
20
+ public end_am_pm: string;
21
+ public hours: { [key: string]: number };
22
+ public hours_method: string;
23
+ public hours_set: boolean;
24
+ public requested_at: number;
25
+ public replied_at: number;
6
26
 
7
27
  constructor(leave: ApiLeave) {
8
28
  this.id = leave.id;
29
+ this.type = leave.type;
9
30
  this.dates = leave.dates;
31
+ this.user = leave.user;
32
+ this.start_date = leave.start_date;
33
+ this.end_date = leave.end_date;
34
+ this.paid = leave.paid;
35
+ this.status = leave.status;
36
+ this.requested = leave.requested;
37
+ this.admin_message = leave.admin_message;
38
+ this.user_message = leave.user_message;
39
+ this.deleted = leave.deleted;
40
+ this.deleted_at = leave.deleted_at;
41
+ this.deleted_by = leave.deleted_by;
42
+ this.admin = leave.admin;
43
+ this.start_am_pm = leave.start_am_pm;
44
+ this.end_am_pm = leave.end_am_pm;
45
+ this.hours = leave.hours;
46
+ this.hours_method = leave.hours_method;
47
+ this.hours_set = leave.hours_set;
48
+ this.requested_at = leave.requested_at;
49
+ this.replied_at = leave.replied_at;
10
50
  }
11
51
  }
@@ -4,8 +4,11 @@ export class Role {
4
4
  public id: number;
5
5
  public name: string;
6
6
  public colour: string;
7
+ public users: number[];
8
+
7
9
  constructor(role: ApiRole) {
8
10
  this.id = role.id;
9
11
  this.name = role.name;
12
+ this.users = role.users;
10
13
  }
11
14
  }
package/src/rotacloud.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AccountsService,
3
3
  AttendanceService,
4
+ DaysOffService,
4
5
  LeaveEmbargoesService,
5
6
  LeaveRequestService,
6
7
  LeaveService,
@@ -10,9 +11,8 @@ import {
10
11
  UsersService,
11
12
  } from './services/index.js';
12
13
  import { SDKConfig } from './interfaces/index.js';
13
- import { DaysOffService } from './services/days-off.service.js';
14
14
 
15
- export class Rotacloud {
15
+ export class RotaCloud {
16
16
  public static config: SDKConfig;
17
17
 
18
18
  public defaultAPIURI = 'https://api.rotacloud.com/v1';
@@ -35,10 +35,10 @@ export class Rotacloud {
35
35
  }
36
36
 
37
37
  get config() {
38
- return Rotacloud.config;
38
+ return RotaCloud.config;
39
39
  }
40
40
 
41
41
  set config(configVal: SDKConfig) {
42
- Rotacloud.config = configVal;
42
+ RotaCloud.config = configVal;
43
43
  }
44
44
  }
@@ -7,10 +7,6 @@ import { InternalQueryParams } from '../interfaces/query-params/internal-query-p
7
7
  class AccountsService extends Service {
8
8
  private apiPath = '/accounts';
9
9
 
10
- constructor() {
11
- super();
12
- }
13
-
14
10
  async *list(options?: Options<InternalQueryParams>) {
15
11
  for await (const res of super.iterator<ApiAccount>({ url: this.apiPath }, options)) {
16
12
  yield new Account(res);
@@ -12,10 +12,6 @@ type RequiredProps = 'user' | 'in_time';
12
12
  class AttendanceService extends Service {
13
13
  private apiPath = '/attendance';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiAttendance, RequiredProps>): Promise<Attendance>;
20
16
  create(
21
17
  data: RequirementsOf<ApiAttendance, RequiredProps>,
@@ -0,0 +1,79 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { ApiGroup } from '../interfaces/index.js';
3
+ import { Service, Options, RequirementsOf } from './index.js';
4
+
5
+ import { ErrorResponse } from '../models/error-response.model.js';
6
+ import { InternalQueryParams } from '../interfaces/query-params/internal-query-params.inteface.js';
7
+ import { Group } from '../models/group.model.js';
8
+ import { GroupsQueryParams } from '../interfaces/query-params/groups-query-params.interface.js';
9
+
10
+ type RequiredProps = 'name';
11
+
12
+ class GroupsService extends Service {
13
+ private apiPath = '/groups';
14
+
15
+ create(data: RequirementsOf<ApiGroup, RequiredProps>): Promise<Group>;
16
+ create(
17
+ data: RequirementsOf<ApiGroup, RequiredProps>,
18
+ options: { rawResponse: true; params?: InternalQueryParams }
19
+ ): Promise<AxiosResponse<ApiGroup, any>>;
20
+ create(data: RequirementsOf<ApiGroup, RequiredProps>, options: Options<InternalQueryParams>): Promise<Group>;
21
+ create(data: RequirementsOf<ApiGroup, RequiredProps>, options?: Options<InternalQueryParams>) {
22
+ return super.fetch<ApiGroup>({ url: this.apiPath, data, method: 'POST' }).then(
23
+ (res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)),
24
+ (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err))
25
+ );
26
+ }
27
+
28
+ get(id: number): Promise<Group>;
29
+ get(id: number, options: { rawResponse: true; params?: InternalQueryParams }): Promise<AxiosResponse<ApiGroup, any>>;
30
+ get(id: number, options: Options<InternalQueryParams>): Promise<Group>;
31
+ get(id: number, options?: Options<InternalQueryParams>) {
32
+ return super.fetch<ApiGroup>({ url: `${this.apiPath}/${id}` }, options).then(
33
+ (res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)),
34
+ (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err))
35
+ );
36
+ }
37
+
38
+ async *list(options?: Options<GroupsQueryParams & InternalQueryParams>) {
39
+ for await (const res of super.iterator<ApiGroup>({ url: this.apiPath }, options)) {
40
+ yield new Group(res);
41
+ }
42
+ }
43
+
44
+ listByPage(options?: Options<GroupsQueryParams & InternalQueryParams>) {
45
+ return super.iterator<ApiGroup>({ url: this.apiPath }, options).byPage();
46
+ }
47
+
48
+ update(id: number, data: Partial<ApiGroup>): Promise<Group>;
49
+ update(
50
+ id: number,
51
+ data: Partial<ApiGroup>,
52
+ options: { rawResponse: true; params?: InternalQueryParams }
53
+ ): Promise<AxiosResponse<ApiGroup, any>>;
54
+ update(id: number, data: Partial<ApiGroup>, options: Options<InternalQueryParams>): Promise<Group>;
55
+ update(id: number, data: Partial<ApiGroup>, options?: Options<InternalQueryParams>) {
56
+ return super
57
+ .fetch<ApiGroup>({
58
+ url: `${this.apiPath}/${id}`,
59
+ data,
60
+ method: 'POST',
61
+ })
62
+ .then(
63
+ (res) => Promise.resolve(options?.rawResponse ? res : new Group(res.data)),
64
+ (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err))
65
+ );
66
+ }
67
+
68
+ delete(id: number): Promise<number>;
69
+ delete(id: number, options: { rawResponse: true; params?: InternalQueryParams }): Promise<AxiosResponse<any, any>>;
70
+ delete(id: number, options: Options<InternalQueryParams>): Promise<number>;
71
+ delete(id: number, options?: Options<InternalQueryParams>) {
72
+ return super.fetch<ApiGroup>({ url: `${this.apiPath}/${id}`, method: 'DELETE' }).then(
73
+ (res) => Promise.resolve(options?.rawResponse ? res : res.status),
74
+ (err) => Promise.reject(options?.rawResponse ? err : new ErrorResponse(err))
75
+ );
76
+ }
77
+ }
78
+
79
+ export { GroupsService };
@@ -1,6 +1,8 @@
1
1
  export * from './service.js';
2
2
  export * from './accounts.service.js';
3
3
  export * from './attendance.service.js';
4
+ export * from './days-off.service.js';
5
+ export * from './groups.service.js';
4
6
  export * from './leave-request.service.js';
5
7
  export * from './leave-embargoes.service.js';
6
8
  export * from './leave.service.js';
@@ -12,10 +12,6 @@ type RequiredProps = 'start_date' | 'end_date' | 'users';
12
12
  class LeaveEmbargoesService extends Service {
13
13
  private apiPath = '/leave_embargoes';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiLeaveEmbargo, RequiredProps>): Promise<LeaveEmbargo>;
20
16
  create(
21
17
  data: RequirementsOf<ApiLeaveEmbargo, RequiredProps>,
@@ -13,10 +13,6 @@ type RequiredProps = 'users' | 'type' | 'start_date' | 'end_date';
13
13
  class LeaveService extends Service {
14
14
  private apiPath = '/leave';
15
15
 
16
- constructor() {
17
- super();
18
- }
19
-
20
16
  create(data: RequirementsOf<ApiLeave, RequiredProps>): Promise<Leave[]>;
21
17
  create(
22
18
  data: RequirementsOf<ApiLeave, RequiredProps>,
@@ -12,10 +12,6 @@ type RequiredProps = 'name';
12
12
  class LocationsService extends Service {
13
13
  private apiPath = '/locations';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiLocation, RequiredProps>): Promise<Location>;
20
16
  create(
21
17
  data: RequirementsOf<ApiLocation, RequiredProps>,
@@ -12,10 +12,6 @@ type RequiredProps = 'name';
12
12
  class RolesService extends Service {
13
13
  private apiPath = '/roles';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiRole, RequiredProps>): Promise<Role>;
20
16
  create(
21
17
  data: RequirementsOf<ApiRole, RequiredProps>,
@@ -1,5 +1,5 @@
1
1
  import axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } from 'axios';
2
- import { Rotacloud } from '../rotacloud.js';
2
+ import { RotaCloud } from '../rotacloud.js';
3
3
  import { Version } from '../version.js';
4
4
 
5
5
  export type RequirementsOf<T, K extends keyof T> = Required<Pick<T, K>> & Partial<T>;
@@ -53,11 +53,11 @@ export abstract class Service<ApiResponse = any> {
53
53
 
54
54
  public async fetch<T = ApiResponse>(httpOptions: AxiosRequestConfig, options?): Promise<AxiosResponse<T>> {
55
55
  const headers: AxiosRequestHeaders = {
56
- Authorization: `Bearer ${Rotacloud.config.apiKey}`,
56
+ Authorization: `Bearer ${RotaCloud.config.apiKey}`,
57
57
  'SDK-Version': Version.version,
58
58
  };
59
- if (Rotacloud.config.accountId) {
60
- headers.Account = String(Rotacloud.config.accountId);
59
+ if (RotaCloud.config.accountId) {
60
+ headers.Account = String(RotaCloud.config.accountId);
61
61
  } else {
62
62
  // need to convert user field in payload to a header for creating leave_requests when using an API key
63
63
  this.isLeaveRequest(httpOptions.url) ? (headers.User = `${httpOptions.data.user}`) : undefined;
@@ -65,7 +65,7 @@ export abstract class Service<ApiResponse = any> {
65
65
 
66
66
  const reqObject: AxiosRequestConfig<T> = {
67
67
  ...httpOptions,
68
- baseURL: Rotacloud.config.baseUri,
68
+ baseURL: RotaCloud.config.baseUri,
69
69
  headers,
70
70
  params: options?.params,
71
71
  paramsSerializer: (params) => {
@@ -12,10 +12,6 @@ type RequiredProps = 'end_time' | 'start_time' | 'location';
12
12
  class ShiftsService extends Service {
13
13
  private apiPath = '/shifts';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiShift, RequiredProps>): Promise<Shift>;
20
16
  create(
21
17
  data: RequirementsOf<ApiShift, RequiredProps>,
@@ -12,10 +12,6 @@ type RequiredProps = 'first_name' | 'last_name';
12
12
  class UsersService extends Service {
13
13
  private apiPath = '/users';
14
14
 
15
- constructor() {
16
- super();
17
- }
18
-
19
15
  create(data: RequirementsOf<ApiUser, RequiredProps>): Promise<User>;
20
16
  create(
21
17
  data: RequirementsOf<ApiUser, RequiredProps>,
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const Version = { version: "1.0.4" }
1
+ export const Version = { version: "1.0.7" }