All files / src/api/v1 Courses.js

32.22% Statements 29/90
85.71% Branches 6/7
36.36% Functions 4/11
32.22% Lines 29/90

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 911x 1x 1x 1x 30x 30x 1x 1x 1x 1x 5x 4x 4x 4x 4x 5x 5x 1x 1x 1x 1x 1x                 1x 1x                 1x 1x                                     1x 1x                                                       1x  
export default class Courses {
    #client;
 
    constructor(client) {
        this.#client = client;
    }
 
    getByCod(cod) { return this.#client.get(`/courses/cod/${cod}`); }
 
    get(id = null, { page = 1, perPage = 15 } = {}) {
        if (id) return this.#client.get(`/courses/${id}`);
        const params = new URLSearchParams();
        if (page)    params.set('page', page);
        if (perPage) params.set('per_page', perPage);
        const qs = params.toString();
        return this.#client.get(qs ? `/courses?${qs}` : '/courses');
    }
    create(data)    { return this.#client.put('/courses', data); }
    edit(id, data)  { return this.#client.patch(`/courses/${id}`, data); }
    delete(id)      { return this.#client.del(`/courses/${id}`); }
 
    dates(courseId) {
        const base = `/courses/${courseId}/dates`;
        return {
            get:    (id = null) => id ? this.#client.get(`${base}/${id}`) : this.#client.get(base),
            create: (data)      => this.#client.put(base, data),
            edit:   (id, data)  => this.#client.patch(`${base}/${id}`, data),
            delete: (id)        => this.#client.del(`${base}/${id}`),
        };
    }
 
    sessions(courseId) {
        const base = `/courses/${courseId}/sessions`;
        return {
            get:    (id = null) => id ? this.#client.get(`${base}/${id}`) : this.#client.get(base),
            create: (data)      => this.#client.put(base, data),
            edit:   (id, data)  => this.#client.patch(`${base}/${id}`, data),
            delete: (id)        => this.#client.del(`${base}/${id}`),
        };
    }
 
    premiums(courseId) {
        const client = this.#client;
        const base = `/courses/${courseId}/premiums`;
        return {
            get:    (id = null) => id ? client.get(`${base}/${id}`) : client.get(base),
            create: (data)      => client.put(base, data),
            edit:   (id, data)  => client.patch(`${base}/${id}`, data),
            delete: (id)        => client.del(`${base}/${id}`),
            items:  (premiumId) => {
                const iBase = `${base}/${premiumId}/items`;
                return {
                    get:    (id = null) => id ? client.get(`${iBase}/${id}`) : client.get(iBase),
                    create: (data)      => client.put(iBase, data),
                    edit:   (id, data)  => client.patch(`${iBase}/${id}`, data),
                    delete: (id)        => client.del(`${iBase}/${id}`),
                };
            },
        };
    }
 
    levels(courseId) {
        const client = this.#client;
        const base = `/courses/${courseId}/levels`;
        return {
            get:    (id = null) => id ? client.get(`${base}/${id}`) : client.get(base),
            create: (data)      => client.put(base, data),
            edit:   (id, data)  => client.patch(`${base}/${id}`, data),
            delete: (id)        => client.del(`${base}/${id}`),
            lessons: (levelId) => {
                const lBase = `${base}/${levelId}/lessons`;
                return {
                    get:    (id = null) => id ? client.get(`${lBase}/${id}`) : client.get(lBase),
                    create: (data)      => client.put(lBase, data),
                    edit:   (id, data)  => client.patch(`${lBase}/${id}`, data),
                    delete: (id)        => client.del(`${lBase}/${id}`),
                    materials: (lessonId) => {
                        const mBase = `${lBase}/${lessonId}/materials`;
                        return {
                            get:    (id = null) => id ? client.get(`${mBase}/${id}`) : client.get(mBase),
                            create: (data)      => client.put(mBase, data),
                            edit:   (id, data)  => client.patch(`${mBase}/${id}`, data),
                            delete: (id)        => client.del(`${mBase}/${id}`),
                        };
                    },
                };
            },
        };
    }
}