Giter VIP home page Giter VIP logo

zc_plugin_deadlines's Introduction

ZC-REMINDER

#team-darwin

Project Description

The reminder plugin is an external feature that gives users the ability to set tasks and reminders on the whatever they are setting. It comes in handy when you and your teammate wants to prioritize doing a certain task or feature over a certain time frame. Users are able to assign tasks to a teammate or an entire channel by navigating directly to the plugin, input the necessary details for that reminder and the teammates are notified accordingly. It aims to serve the entire Zuri Chat.

Project Structure

This project is a monolith application. You will find two folders namely:

  1. Backend
  2. Frontend

Depending on your track, you are to work in the folder that concerns you.

Setup

Simply clone this repo on your pc, by typing out this command on your terminal.

  • git clone https://github.com/zurichat/zc_plugin_reminder.git
  • Then type this command in your terminal cd zc_plugin_reminder.
  • Then run yarn holoInstall to install all the requisite dependencies.
  • cd into the folder you're working on; Backend for Backend and frontend for Frontend
  • To start the servers just type yarn dev and it will start up the necessary server.

Contributing

  1. Before working on any task, you are meant to pull the latest changes from the dev branch, then create a separate branch to work on that particular task.

  2. When creating PR, link the issue you worked on to your PR and wait for it to be reviewed. Never merge on your own.

Coding Guide

Commits

Git commits should follow the format:

[file/method/function changed]: (Fixes #num | Refs #num  | Closes #Num) Your descriptive commit message

Note: #num is a pull or issue number.

For example:

[Navbar]: Fixes #20 Add side-navbar

Major Changes

All changes are made in new branches and a pull request should be opened against the dev branch for review.

File names

File names must be all lowercase and may be separated by dot . For example:

;-User - create.user.js - update.user.js

Indentation

We use two spaces for indentation. If you use a code editor like vscode, you can set a default spaces to 2 instead of 4. We do not use Tab.

Source file structure

A file consist of the following, in order:

  • License or copyright information
  • ES import statements, if an ES module
  • The file’s source code

For example

/**
    Copyright 2021, ZC-Plugin-reminder.
    All rights reserved.
    Written by <your name>
**/

import Button from 'components/button'
import me from 'you'
import { cat, dog, eagle } from '../animals'

/**
    Returns the sum of two numbers
    @param {number} num1 
    @param {number} num2 
    @returns {number} sum of num1 and num2 
*/
const returnTotal = (num1, num2) => {
	return num1 + num2
}

Naming convention

Class names

Class, interface, record, and typedef names are written in UpperCamelCase e.g LoadAvatar. Type names are typically nouns or noun phrases. For example, Request.

Method names

Method names are written in lowerCamelCase e.g addNum. Names for private methods must start with a trailing underscore e.g _startAddition.

Method names are typically verbs or verb phrases. For example, sendRequest or _startProcess. Getter and setter methods for properties are never required, but if they are used they should be named getThing (or optionally isThing or hasThing for booleans), or setThing(value) for setters.

Constant Names

Constant names use CONSTANT_CASE: all uppercase letters, with words separated by underscores.

Testing

We use Mocha and Jest for testing, and require contributors to follow a Test Driven Development (TDD) approach where you write test to fail at first and then write the corresponding function to pass the test.

zc_plugin_deadlines's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zc_plugin_deadlines's Issues

Requesting for Deadline Extention

As a user, who has been named as an assignee on a task, I should be able to request for a deadline extension by clicking on the request for new deadline button.

Acceptance

  • I can request for a deadline extension as an assignee on a task by clicking on the request for new deadline button

View Cards on Main Overview Board

As a user, I should be able to view the cards on main activity board which shows the

  • name of task
  • shortened description of task
  • start date and time of task
  • End date and time of task
  • hours till deadline of task
  • first 4 pictures of assignees

Acceptance

  • I can view cards in the main activity board.
  • Each card contains the name of tasks, shortened description of tasks, start and end date of task, hours till deadline of task and first 4 pictures of assignees.

Assigning Priorities to Tasks

As a user creating a task, I should be able to assign a priority to the task being created in the priority field

Acceptance

  • I can see an input field labelled priority
  • I can assign priority to my task by selecting one of the priority options hard-coded into the drop down selection box.

Deadline Extension

As a user, when I click a certain card to view the details of that card, I should see an option that lets me request an extension on a particular task.

Acceptance

  • I can see an option to extend the deadline date of a particular task.

Night/Day Mode

As a user, I should be able to set my App to either a dark theme setting
The setting should also be remembered for the next time I login my app

Acceptance

  • I can set my app to a dark theme setting

Write Label Name on Create Task Form

As a user, on the Create Task Form, I should be able to see a dropdown menu so I can view the different Label types that I can assign to a task.

Acceptance

  • I can see a dropdown menu where I can choose the label for a particular task.

Task Creation Notification

As a user, on creation of a task, I should receive a notification for the task created if my username is listed as an assignee while the task was being created.

Acceptance

  • I can see a notification of a new task being created because my username as been listed as an assignee by the admin

View Single Card Detail

when I click on the 'create deadline' button I should see a reusable blank card that'll carry input details for new deadline.
the rest of the page behind should be blurred out

Create Task Form

After clicking on the create issue button, as a user, I should be able to see a pop-up form that allows me to write a new task and set a deadline to it.

Acceptance

  • After clicking the create issue button, i can see a form that pops up that allows me to write a new task and set a deadline to it.

Sorting Cards in the To-do Section

Users should be able to sort cards in the To-do section according to time created and priority

Acceptance

  • I should be able to sort the cards in the To-do section according to time created (ascending or descending) and priority

Cancelling a Task Creation

As a user, I should be able to click on a button on the task form that cancels the task creation and takes me back to the main activity board without the former task bring created.

Acceptance

  • I can see a cancel button on the create task form
  • As I click the button, the task being created is cancelled.
  • I am taken back to the main activity board.

Delete Comment Route

As a user, I should be able to make a DELETE request, so I can be able to delete my comment if I don't like it.

Acceptance

  • I have a deleteComment route that accepts a comment's ID and deletes that specified comment

Write Task Summary on Create Task Form

As a user, I should be able to fill an input-field with a label of summary where I can describe the summary of the task.

Acceptance

  • I can fill my summary field with a summary of the task.

Sorting Of Cards On Main Activity Board

As a user, I want to be able to set my cards in the in-progress and up-coming deadline sections to be sorted either according to closest deadlines or priority

Acceptance

  • I can sort my cards in the in-progress and up-coming deadline sections either by closest deadlines or priority.

Get Tasks Routes

As a user, I should be able to see a list of all my tasks and all tasks created by making a GET request to a getTask route.

Acceptance

  • I have a getTask route, that returns a list of all tasks created.

Reschedule Deadline Route

As a user, I should be able to make a GET request, so I can reschedule a deadline.

Acceptance

  • I have a rescheduleDeadline route that accepts a task Id and updates the deadline of the route
  • Upon successful rescheduling, notification is sent to the parties involved with that task.

Edit task Route

As a user, I should be able to make a PATCH request that will update specific details about a given task.

Acceptance

  • I have a editTask which lets me update properties about a task.

Editing Description while viewing a single Card's details

As an admin, when I view a single card's details, I should be able to edit the description added to that particular task that I've been listed as an admin of.

Acceptance

  • I can update or change the content of the task's description box if I am listed as an admin for the task

Setup Job to send notifications at specified times

As a user, I should be able to get notifications periodically, so I and my teammates can know the status of reminders via mail or notifications.

Acceptance

  • I have a scheduler running that gets all reminders and sends them at the time specified.
  • I have a queue to handle the messages that are being sent by the scheduler

Steps

  • Install agenda from here https://www.npmjs.com/package/agenda
  • Create a job, that runs every minute. Inside the job,
  • Retrieve all reminders by calling the respective database function,
  • Write a logic that checks if the date is an hour to expiration, then send the reminder object to a queue
  • The queue picks it up and sends the respective mails to the individuals.

Create Task Button

As a user, there should a button tagged create on the task form that can be clicked which creates the task and adds it to the to do section on the main activity board

Announcement

  • I should be able to click the create button on the task form that creates my task and takes me to the main activity board where I can see my newly created task.

Add Comments

As a user, I should be able to add and see comments on any particular task.

Acceptance

-[ ] I can add, edit and view the comments for my comment and other comments.

Notification for Rescheduling Deadlines

As a user, when the admin reschedules the deadline, I should be able to receive a notification to this effect

Acceptance

  • I can receive a notification telling me when an admin has rescheduled the deadline of a task I'm listed as an assignee on.

Fetch Data for cards from Database

The data of the cards are fetched from the database using a fetch request to an the api link

Acceptance

  • fetch request is made with an api link to the backend to get the data of all the cards.

Viewing Tasks Assigned to Specific Users

As a user, I want to be able to view tasks assigned specifically to me by clicking on the for me button on the main activity page

Acceptance

  • I can view tasks assigned to me by clicking on the for me button

Add Task Tag on Task Form

As a user, I should be able to add a tag to my tasks created and the tags should automatically be added to the list of tags other users can choose from via a dropdown selection.

Acceptance

  • I can add a tag to my tasks.
  • My tag should automatically be added to the list of tags other users can select from via a drop-down selection.

Cards Showing Time Left

As a user, I should be able to see cards on the main activity page display the time left until deadline

Acceptance

  • I can see cards on the main activity page display the time left until the card's deadline

Selecting Assignees on Task Form

As a user creating a task form, I should be able to see an input filed labelled Assignees where I can input names/ usernames of users I want to assign that particular task to.

Acceptance

  • I can see an input field labelled Assignee
  • I can add users to the field by typing their usernames

Get Notifications

As a user, I should be able to get notifications when the deadline for any task is approaching.

Acceptance

  • I should be able to get notified via email, push-notifications, and a bot`

Get notification on new task

As a user, I should be able to get a new notification when I have a task assigned to me.

Acceptance

  • I can receive and view notifications when I am assigned a task.

View Create Button

As a user, I want to be able to see a Set Deadline button and be able to click it.

Acceptance

  • I have a button named Set Deadline that when I click it, opens a form to input the details for about a task.

View Task Status on Create Task Form

As a user, once a task is created, I should be able to see the task appear on the to do section.

Acceptance

  • I can view my newly created task under the to do section

Adding Attachments to Task Form

As a user, I should be able to upload documents/ files to attach to the task I'm creating.

Announcement

  • I can upload document/files to attach to the task I'm creating.
  • I can browse for documents on my system/library and upload for attachment to the task I'm creating.

Filtering Tasks Using Priorities

As a user, I want to be able to filter tasks by selecting the order of priority

Acceptance

  • I can filter tasks in the order of priority I've selected

Editable Comments

As a user, I should be able to edit the comments I make under a task.

Acceptance

  • I can edits the comments i made under a task

Sorting Comments on the Single Task Page

As a user, while viewing a single task, I should be able to sort through the comments using :

  • Newest first
  • Oldest first, etc.

Acceptance

  • I can sort comments by time( ascending or descending order), etc.

Handling Expired Deadlines

As a user, once a deadline is expired, I should be able to see that the said task has been automatically moved to the expired section of the main activity section.

Announcement

  • I can see my expired tasks automatically moved to the expired section of the main activity page.

Viewing Cards on the Main Activity Page

As a user, on the cards in the main activity page, I should see each card which contains Task name, Labels, Priority and Time till deadline.

Acceptance

  • I can see each card that contains the task name, labels, priority and time till deadline on the main activity page.

Write Task Title on Create Task Form

As a user, on the Create task form, I should be able to see an input field so I can write the title of the task.

Acceptance

  • I have an input field where I can write the task name

Selecting an Admin for the Task on the Task Form

As a user, on the creation of the task form, I should be able to assign the admin position to a user on the app by typing in the user's username. If no user is assigned, The user creating the task is automatically assigned as admin.

Acceptance

  • I can see an input filed with a label of admin
  • I can assign the admin position to an app's user by inputting the user's username
  • If I don't assign a user as admin, I should automatically be assigned as admin

Create Task Route

As a user, I should be able to make a POST request to a specified route, so I can insert a new task into the database.

Acceptance

  • A createNewTask route exists to create new tasks.

Notification Frequency Customization

As a user, I should be able to customize how often I get notifications about my upcoming deadlines

Acceptance

  • I can customize the frequency of my notifications about my upcoming deadlines

Get comment Route

As a user, I should be able to view all comments made by my teammates by making a GET request to a specified route.

Acceptance

  • A getComments route exists and I can successfully view all comments for a task.

Write Description On Create Task Form

As a user, on the Create Task Form, I should be able to see an input field where I can write the description of the task.

Acceptance

  • An input field exists where I can type the description of the task.

Filtering Tasks With Labels

As a user, on the main activity board, I should be able to filter tasks using labels

Acceptance

  • I can filter tasks using labels

View Main Activity Board

As a user, I should be able to see the main page with a float display of 2 main sections

Acceptance

  • I can see the main page with a float display of 2 main sections

Extending Deadline As an Admin

As an admin, I should be able to extend the deadline on the task I've created when I view the card's detail

Acceptance

  • I have access to extend the deadline of a task I am listed as an admin of

View Deadlines by Priority

As a user, I should be able to sort deadlines by priority, so I can know which task/deadline is of more importance.

Acceptance

  • I can successfully view tasks by priority and see which task is of high or low priority.

Filtering Tasks By Name

As a user, I should be able to filter tasks on the main activity board by typing the name in the search field and clicking the search button

Acceptance

  • I can search for a task using its name by inputting the name of the task in the search field and clicking on the search button

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.