descholar-ceo/AnnounceIT

View on GitHub
server/v2/models/announcement.js

Summary

Maintainability
B
4 hrs
Test Coverage
import {
    ADD_NEW_ANNOUNCEMENT,
    GET_ALL_ANNOUNCEMENTS_FOR_CURRENT_USER,
    GET_ANNOUNCEMENT_BY_ID,
    GET_ANNOUNCEMENT_BY_STATUS,
    GET_ALL_ANNOUNCEMENTS,
    DELETE_ANNOUNCEMENT,
    UPDATE_ANNOUNCEMENT_STATUS,
    USER_UPDATE_HIS_ANNOUNCEMENT,
    CHECK_ANNOUNCEMENT_EXISTANCE
} from "./configs/queries";
import connect from "./configs/connect-db";

class Announcements{

    // adding new
    async addNewAnnouncement(announcement) {
        const {
            announcementowner,
            announcementstatus,
            annoucemmenttext,
            announcementstartdate,
            announcementsenddate
        } = announcement;
        const queryString = {
            text: ADD_NEW_ANNOUNCEMENT,
            values: [
                announcementowner,
                announcementstatus,
                annoucemmenttext,
                new Date(announcementstartdate),
                new Date(announcementsenddate)]
        };
       
        const {rows} = await connect.query(queryString);
        
        return rows;
    }

    // all for a currently logged in user
    async getAllAnnouncementsByOwnerId(owner) {
        const { rows } = await connect.query({ text: GET_ALL_ANNOUNCEMENTS_FOR_CURRENT_USER, values: [owner] });
        return rows;
    }

    // by id
    async getSpecificAnnouncementById(announcID, userID) {
        const { rows } = await connect.query({ text: GET_ANNOUNCEMENT_BY_ID, values: [announcID, userID] });
        return rows;
    }

    // by status
    async getSpecificAnnouncementByStatus(announcStatus, userID) {
        const { rows } = await connect
            .query({ text: GET_ANNOUNCEMENT_BY_STATUS, values: [announcStatus, userID] });
        return rows;
    }

    // admin get all
    async adminGetAllAnnouncements() {
        const { rows } = await connect.query({ text: GET_ALL_ANNOUNCEMENTS });
        return rows;
    }

    // delete announcement
    async deleteAnnouncement(id) {
        const { rows } = await connect.query({ text: DELETE_ANNOUNCEMENT, values: [id] });
        return rows;
    }

    // update status
    async adminChangeStatusOfAnnouncement(announcId, status) {
        const { rows } = await connect.query({ text: UPDATE_ANNOUNCEMENT_STATUS, values: [status, announcId] });
        return rows;
    }

    // update user announcement
    async userUpdatesHisAnnouncement(userID, announcId, annNewBody) {
        const { rows } = await connect.query({ text: USER_UPDATE_HIS_ANNOUNCEMENT, values: [annNewBody, announcId, userID] });
        return rows;
    }

    // check if announcement exists
    async checkIfAnnouncementExist(announcId) {
        const { rows } = await connect.query({ text: CHECK_ANNOUNCEMENT_EXISTANCE, values: [announcId] });
        return rows[0].exists;
    }
    
}

class AnnouncementData{
    constructor(announcData, ownerId) {
        this.announcementowner = ownerId;
        this.announcementstatus = "Pending"
        this.annoucemmenttext = announcData.text;
        this.announcementstartdate = announcData.startdate;
        this.announcementsenddate = announcData.enddate;
    }
}

const announcements = new Announcements();
export default {announcements,AnnouncementData}