lh-sdk
Version:
LassondeHacks REST API SDK in Typescript
129 lines (107 loc) • 3.72 kB
text/typescript
import { Model, SDK, Response } from './common';
module Event {
export interface EventInterface {
id: number;
begin_time: Date;
end_time: Date;
name: string;
image: string;
}
interface CreateEventResponse extends Response {
event: EventInterface;
}
interface GetEventByIdResponse extends Response {
event: EventInterface;
}
interface GetAllEventResponse extends Response {
events: EventInterface[];
}
interface GetActivitiesResponse extends Response {
activities: any[];
}
export async function create(event: EventInterface): Promise<Instance> {
try {
let res = <CreateEventResponse>await SDK.getInstance().POST("event", event);
return new Instance(res.event);
} catch (err) {
return null;
}
}
export async function getById(id: number): Promise<Instance> {
try {
let res = <GetEventByIdResponse>await SDK.getInstance().GET("event/" + String(id));
if (res.success && res.event) {
return new Instance(res.event);
} else {
return null;
}
} catch (err) {
return null;
}
}
export async function getAll(id: number): Promise<Instance[]> {
try {
let res = <GetAllEventResponse>await SDK.getInstance().GET("event");
if (res.success && res.events) {
let events: Instance[] = [];
for (let event of res.events) {
events.push(new Instance(event));
}
return events;
} else {
return null;
}
} catch (err) {
return null;
}
}
export class Instance implements EventInterface, Model {
public id: number;
public begin_time: Date;
public end_time: Date;
public name: string;
public image: string;
constructor(event: EventInterface) {
this.id = event.id;
this.begin_time = new Date(event.begin_time);
this.end_time = new Date(event.end_time);
this.name = event.name;
this.image = event.image;
}
public async save(): Promise<boolean> {
return new Promise<boolean>(async (resolve, reject) => {
let result = <Response>await SDK.getInstance().PUT("event/" + String(this.id), {
begin_date: this.begin_time,
end_date: this.end_time,
name: this.name,
image: this.image
});
if (result.success) {
resolve(true);
} else {
reject(result.err);
}
});
}
public async delete(): Promise<boolean> {
return new Promise<boolean>(async (resolve, reject) => {
let result = <Response>await SDK.getInstance().DELETE("event/" + String(this.id), {});
if (result.success) {
resolve(true);
} else {
reject(result.err);
}
});
}
public async getActivities() {
return new Promise<any>(async (resolve, reject) => {
let result = <GetActivitiesResponse>await SDK.getInstance().
GET("event/" + String(this.id) + "/activity");
if (result.success && result.activities) {
resolve(result.activities);
}
});
}
}
}
export = Event;