Giter Club home page Giter Club logo

todolist's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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

todolist's Issues

Docker support

It would be nice to create a Dockerfile for this project

Unit testing

**Is your feature request related to a problem?

We need unit tests to cover the project with.

Currently covered
codecov

Create README.md

Create a nice README.md for this project

  • Include setup instructions

  • Features

  • Travis-ci badge
    [![Build Status](https://travis-ci.org/amoraitis/TodoList.svg?branch=develop)](https://travis-ci.org/amoraitis/TodoList)

User is never signed in

Describe the bug
var currentUser = await _userManager.GetUserAsync(User); returns null on sign in

To Reproduce
Steps to reproduce the behavior:

  1. Login or sign up new account
  2. Page redirects to Home page without signing

Expected behavior
User should be signed in.

Add ability to show holidays in calendar view.

Is your feature request related to a problem? Please describe.
The user will have the ability to import holidays as tasks to the monthly calendar view.

Describe the solution you'd like
Add a new Model class under TodoList/TodoList.Core/Models/:
This will need a new migration for the new UserPreferences table.

class UserPreferences
// In iso-3166 format. 1 for now. _In the future create a config value to support multiple countries._
+ UserId: Guid[Key. 1-1 relationship to ApplicationUser.Id]
+ HolidaysInCountry : string

Use Calendarific which offers 1000 free requests/month.

A clear and concise description of any alternative solutions or features you've considered.

Add an HttpClient. Preferably create an IHolidaysCalendarService interface and an implementation of that at HolidaysCalendarService. Investiagate what methods we will need.

Create front-end code that updates the preferences. In the Calendar view or in the user's account menu(add as user preferences tab). This will automatically attach all holidays when navigating to calendar if UserPreferences.HolidaysInCountries is not null in the DB. So, TodosController.Home() Action will also return a list of holidays to be presented. Prepare the View to show the new Data in the same way the existing TODOs do.

  • Add new List of countries to options, preferably a .json file under a /.content folder.
    Use the response from this request.
  • Add new key-value pair to secrets.json for Calendarific's API key. And base URL to the appsettings.json.

Additional context

Holidays response as documented here:
Create this under TodoList/TodoList.Core/Responses/

namespace TodoList.Core.Responses
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class HolidaysResponse
    {
        [JsonProperty("meta")]
        public Meta Meta { get; set; }

        [JsonProperty("response")]
        public Response Response { get; set; }
    }

    public partial class Meta
    {
        [JsonProperty("code")]
        public long Code { get; set; }
    }

    public partial class Response
    {
        [JsonProperty("holidays")]
        public Holiday[] Holidays { get; set; }
    }

    public partial class Holiday
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("description")]
        public string Description { get; set; }

        [JsonProperty("date")]
        public Date Date { get; set; }

        [JsonProperty("type")]
        public string[] Type { get; set; }
    }

    public partial class Date
    {
        [JsonProperty("iso")]
        public DateTimeOffset Iso { get; set; }

        [JsonProperty("datetime")]
        public Datetime Datetime { get; set; }
    }

    public partial class Datetime
    {
        [JsonProperty("year")]
        public long Year { get; set; }

        [JsonProperty("month")]
        public long Month { get; set; }

        [JsonProperty("day")]
        public long Day { get; set; }
    }
}

Todo should have tag(s)

Is your feature request related to a problem? Please describe.

It's convinient to use tags to be able to organize our todos.

Describe the solution you'd like

  • In TodoItem.cs add a field for tags. It's clearly a Collection of tags, because the user can apply as many tags he/she wants to.

Describe alternatives you've considered
Another possible solution is to se categories...

Additional context

  • Use search to add the tags, when the user creates a todo, or edits it. User is able to create a tag.
  • Add the entries in the ApplicationDbContext class
  • Extend the ITodoItemService with a method which will return a list of todos based on tags.
  • Update the TodosControlller with a new search endpoint, of your choice to return a view(see the next task) when posting tags.
  • Last but not list, extend the current views to support the functionallity, and/or create your own views(where do you think that we can use this or not)

[Bug] EmailSender service should not send an email when a SendGrid API key isnt set

It seems that there is an exception at EmailSender service because there is no SendGrid API key to use. Although, you can still sign in with the user you created with the registration form.

Solution

We should update the module to bypass this in a development environment.

  • First, we should check if a SendGrid API key is set in the configuration.

  • If it's set go ahead and send the email.

  • If not, log an error, and exit the method(Don't try to send an email at all).

Originally posted by @amoraitis in #25 (comment)

Project architecture improvements: Consume new REST API

Is your feature request related to a problem? Please describe.
We will eventually need to implement an HttpClient into our application to consume the new API introduced by #44 .

Describe the solution you'd like
Implement an HttpClient in our TodoList.Web project and inject that in the controllers(not directly, follow principles).

.env file is open to the public with a simple google search

Describe the bug
I did a google search for 'filetype:env "PASSWORD" and it returned your password.env file. Those should be private, encrypted variables if I'm not mistaken.

To Reproduce
Steps to reproduce the behavior:

  1. Go to google.com
  2. Type in filetype:env "PASSWORD"
  3. It is the 2nd result for me.

Expected behavior
Passwords are hashed or otherwise encrypted using variables that aren't accessible to the public.

https://github.com/amoraitis/TodoList/blob/develop/password.env

Not sure if it's a bug or just garbage testing values, but wanted to give a heads up.

Project does not build due to libman dependency

After a new checkout i can't build the project. Getting erros on libman restore.

Steps to reproduce the behavior:

  • Clean checkout.
  • Build project

Expected behavior
Project build succesfull.

Screenshots
libman.json : error LIB002: The "[email protected]" library could not be resolved by the "cdnjs" provider [D:\TodoList\TodoList.Web\TodoList.Web.csproj] libman.json : error LIB002: The "[email protected]" library could not be resolved by the "cdnjs" provider [D:\TodoList\TodoList.Web\TodoList.Web.csproj] libman.json : error LIB002: The "[email protected]" library could not be resolved by the "cdnjs" provider [D:\TodoList\TodoList.Web\TodoList.Web.csproj] libman.json : error LIB002: The "[email protected]" library could not be resolved by the "cdnjs" provider [D:\TodoList\TodoList.Web\TodoList.Web.csproj]

[Defect] Change how the user secrets are currently deployed.

Describe the bug

To Reproduce

Currently, we run one command per secret, which is painful for developers who want to contribute to our project.

Support for social login providers
If you want to allow your users to login with their social accounts, e.g. Facebook, follow instructions below.

Facebook
1 - Follow this guide to generate AppID and AppSecret.

2 - Execute the following instructions from TodoList/TodoList.Web:

dotnet user-secrets set Authentication:Facebook:AppId <app-id>
dotnet user-secrets set Authentication:Facebook:AppSecret <app-secret>
Google
1 - Follow this guide to generate ClientID and ClientSecret.

2 - Execute the following instructions from TodoList/TodoList.Web:

dotnet user-secrets set Authentication:Google:ClientId <client-id>
dotnet user-secrets set Authentication:Google:ClientSecret <client-secret>
Microsoft
1 - Follow this guide to generate ClientID and ClientSecret.

2 - Execute the following instructions from TodoList/TodoList.Web:

dotnet user-secrets set Authentication:Microsoft:ClientId <client-id>
dotnet user-secrets set Authentication:Microsoft:ClientSecret <client-secret>
Twitter
1 - Follow this guide to generate App ID and AppSecret.

2 - Execute the following instructions from TodoList/TodoList.Web:

dotnet user-secrets set Authentication:Twitter:ConsumerKey <consumer-key>
dotnet user-secrets set Authentication:Twitter:ConsumerSecret <consumer-secret>

Expected behavior
The user should only deploy a JSON containing the required USER_SECRETS
Include SendGrid ApiKey to the new secrets.

Additional context
Create a default JSON, containing the keys needed, with their values set to an empty string.
Here are more information and a guide on how to implement that: https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1&tabs=windows.

Create a public home, about and contact us page

Is your feature request related to a problem? Please describe.
We could add our own public pages instead of using the template's defaults.

Describe the solution you'd like
Create a minimal page for each one. Make use of the existing functionality in the HomeController.cs and the existing razor pages under the Views/Home/ directory

[Ideas] Xamarin app creation

Here is an issue for brainstorming for a new Xamarin App.

Please leave your suggestions in the comments.

This issue will also address the basic implementation of the new Xamarin project(s).

Basic Implementation:

  • Login functionality/Home Screen for both logged in/out user.
  • A list of todos, for now, will display only the basic info about the todo item.

Nothing more. Other issues will expand the new App

Create ToDo from web is failing due to UserId is null

Describe the bug
When creating ToDo item from web it is failing due to UserID is null .

To Reproduce
Goto Create
Submit to item

Expected behavior
It should save the item.

Screenshots
image

Additional context
I think we should segregate DB models and viewmodels. Then do automapper and save. Please confirm and let me know.

[Feature] Add calendar view for Todos in the home page

Is your feature request related to a problem? Please describe.
It would be nice, if we had a calendar view option in the home page, showing the todos of the current month.

Describe the solution you'd like

  • Frontend
    Use bootstrap's tabs like buttons (I think that this requires bootstrap 4, in this case the present is blocked by #13 ) to navigate between views. Also, for the calendar view, use tables, at first, and see how that works. In each cell, we want only the titles of the Todos with each links at Todos/Details?id={id}

  • Backend
    Another endpoint should be created at Todos/{month}-{year} to access the required resources.

Describe alternatives you've considered
Use an existing calendar view, but in this case, let's build something from scratch...

Additional context
We need a viewmodel for the new page, to request only the data we need.

Localization support

Anyone can improve the existing translations, feel free to extend.

Is your feature request related to a problem? Please describe.

We really should create a multilingual website. Thus an app like this will reach a wider audience

Describe the solution you'd like

We could definitely use localization as it is described in the docs
Using .resx files is a safe solution.

Describe alternatives you've considered
We could also use transifex

[Suggestion] Use AutoMapper for object-object mapping

Currently we use manual mapping of DTOs to their respective DB entities which clutters the code.

Proposed solution
It would be nice to use AutoMapper library for automatic mapping of objects.

Alternative solution
An alternative solution, in case we don't want to add more packages, would be to implement Map() extension methods for every objects.

Import from another service

Is your feature request related to a problem? Please describe.
It would be nice for an app like this to import content from popular apps like Wunderlist(Microsoft will abandon Wunderlist)

Describe the solution you'd like
Use the service's API to get content

Solution steps

  • User clicks a button in his home page with the text "Import from service"
  • A callback is created to log in the user and get service's tasks
  • Then the user is redirected to a new page to select the tasks to import
  • Finally, one can click to "Add" button and actually import the tasks

Additional context

Wunderlist is shutting down.

https://developer.wunderlist.com/documentation
https://developer.wunderlist.com/documentation/concepts/authorization

Upgrade to BootstrapV4

Let´s upgrade the project´s bootstrap to 4 and make the required changes to the website to be functional!

The process is written here, step-by-step.

[Feature] Include a file in a Todo

Is your feature request related to a problem? Please describe.
It would be nice if we had the option to add a file in each todo

Describe the solution you'd like

  • Create a class to hold information about a file(Path, Size)

  • Add a property in the Todo class to map the file

  • Create actions to upload and view the file

  • Last but not least, front-end additions to expose the above actions

Additional context
Documentation: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.0

[Feature] Extend calendar view functionality

Is your feature request related to a problem? Please describe.
Right now(as implemented in #15 , the calendar view shows only a badge with the number of todos of each day.

Describe the solution you'd like
Extend UI functionality and make the badge clickable.
When the user clicks that badge, open a pop-up or append below the calendar a view to show details about those todos.

[Feature] Add registration using Facebook, Twitter, Google and Microsoft accounts

Is your feature request related to a problem? Please describe.
Make it easier for a new user to register with an existing social account.

Describe the solution you'd like

  • Implement social login following asp.net core documentation.
  • Do not create apps at the social networks' developer pages, because the current app is not in production!

Additional context
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/?view=aspnetcore-2.2&tabs=visual-studio

[Feature] Notifications and Todo participants

Is your feature request related to a problem? Please describe.
It would be really beautiful to add tasks shared between users

Describe the solution you'd like
Add Participants field to TodoList entity and notifications to the ApplicationUser entity for the backend. Also, an invite button for todos would be nice, among with a notification glyph in the right menu.

Describe alternatives you've considered
Make use of the SignalR library to make it real time

[Feature] Add gravatar for users

Is your feature request related to a problem? Please describe.
It would be nice if we integrate and use gravatar for a default user icon.

Describe the solution you'd like

  • Use GravatarHelper.AspNetCore

  • Retriεve it in the top-right menu instead of "Hi {username}"

  • and User's profile page

Additional context
Default size for menu-icon=20
Default size for profile-icon=60

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.