Giter Site home page Giter Site logo

mvc-silver-snakes's Introduction

Tabloid MVC

Good news, everyone, our Tabloid CLI Proof of Concept did it's job! We were able to test our business idea after a minimal amount of development time. And we learned people don't want to keep a list of other people's blog content. What they really want is to make their own content.

So it's time to pivot. We're still going to focus on long-form writing, but not we'll let people write their own posts.

Tabloid Prototype

We're ready to build a working prototype of the Tabloid application. This prototype will help us better understand and refine our product. It won't be as feature-rich or as polished as our final product, but it should implement the core features and be as close to our current vision of the product as possible.

We know we want a multi-user web application with a rich user experience. For the final product, we we'd like to use react, but we'd like to develope the prototype as rapidly as possible. The architect has decided that ASP.NET Core MVC is the perfect balance of features and rapid development.

Users

Tabloid MVC will have two types of users:

  • Authors can create Posts, manage their own Posts, and read and comment on other authors' posts.

  • Admins can do all the things authors can do, but are also in charge of managing all the data in the system.

ERD

Tabloid ERD

mvc-silver-snakes's People

Contributors

ste163 avatar bshoop33 avatar terraroush avatar askingalot avatar tristan0508 avatar

Watchers

James Cloos avatar

mvc-silver-snakes's Issues

Edit a Post

As a author I would like to be able to modify my Posts so that I can correct mistakes or add additional content.

Given the user is viewing the Post list
When they select the option to edit an Post
Then the user should be directed to a form and given the ability to change the Post's information

Given the user is finished updating the Post information
When they click the Save button
Then the updated Post should be saved to the database
And the user should be redirected to the new Post's details page

Given the user has decided not to edit the Post
When they click the Cancel button
Then the user should be redirected back to the list page

Editable Information

  • Title
  • Content
  • Category
  • Header Image URL (optional)
  • Publication Date (optional)

Deactivate a User Profile

As an admin I would like the ability to deactivate a User Profile so that I can prevent unsavory characters from using the system.

Given an admin is vising the list of User Profiles
When they select the Deactivate option
Then they should be prompted to confirm deactivation

Given the admin wishes to confirm the deactivation
When they the select the option to confirm
Then the User Profile should be deactivated in the system
And the admin should be directed back to the User Profile list

Given the admin decides not to confirm the deactivation
When they the select the option to reject confirmation
Then the User Profile should NOT be deactivated
And the admin should be directed back to the User Profile list

Given a user is deactivated
When they try to login to the system
Then the system should behave as if the user does not exist

View Current User's Posts

As an author, I would like to see a list of all the Posts I have written so that I can easily view, edit, delete, publish or unpublish them.

Given the user is in the Tabloid application
When they select the My Posts menu option
Then they should be directed to the "My Posts" list page
And the page should display ALL the Posts authored by the logged-in user
And each post in the list should display the title, author and category
And the list should be in order of creation date with the most recent on top

Delete a Post

As an author I would like the ability to remove a post I have written so that I can prevent others from reading it when I decide it is no longer something I wish people to read.

Given an author is viewing a Post that they have written
When they select the delete option
Then they should be presented to confirm the deletion

Given the author wishes to confirm the delete
When they the select the option to confirm
Then the Post should be removed from the system
And the author should be directed back to the Post list

Given the author decides not to confirm the delete
When they the select the option to reject confirmation
Then the Post should NOT be removed from the system
And the author should be directed back to the Post details

Create a Tag

As an admin I would like to be able to create a new Tag so that I can give authors the ability to better classify their posts.

Given an admin is on the Tag list page
When they select the Create Tag button
Then they should be directed to a form in which they can enter a new Tag name

Given an admin has entered a Tag name
When they click the Save button
Then a new Tag should be saved to the database
And the admin should be directed to the Tag list page

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Remove a Tag from a Post

As an author I would like to be able to unassociate one or more Tags from one of my Posts so that I can correct a mistakenly added Tag.

Given the author is viewing Post details
When they select the Manage Tags option
Then they should be presented with a selection of Tags options that are associated with the Post

Given the author has selected the Tags they wish to remove from a Post
When they click the Save button
Then the association should be removed from the database
And the user should be directed to the Post details page
And the removed Tags should no longer be displayed on the Post details page

Logout

As a user I would like to be able to logout of the system so that I can ensure that no one else who uses my computer will have access to my Tabloid account.

Given an authenticated user is in the Tabloid application
When they select the Logout option from the menu
Then they should be logged out of the system
And they should be directed to the home page

Subscribe to a User's Posts

As a reader I would like to be able to subscribe to authors that I enjoy so that I can more easily find new Posts they have written.

Given A user is on a Post detail page
When they select the option to subscribe to the Post's author's other Posts
Then a Subscription should be created in the database
And the Subscription's begin datetime should be set to the current time

Author Created Posts are initially Unapproved

As an admin I would like Posts written by non-admin users (a.k.a. "Authors") to be initially unapproved, so that authors are unable to publish any inappropriate Posts without oversight.

NOTE: If an admin writes a Post it should be automatically approved.

Reactivate a User Profile

As an admin I would like the ability to reactivate a User Profile so that I can correct an mistaken User Profile deactivation

Given an admin is vising the list of User Profiles
When they select the View Deactivated option
Then they should see a list of deactivated User Profiles

Given an admin sees a User Profile they wish to reactivate
When they select the Reactivate option
Then the user should be reactivated
And the user should have the same access to the system they had prior to being deactivated

View a Post's Comments

As a reader, I would like to see a list of all the Comments on a Post so that I can read and take part in the discussion on a particular Post.

Given the user is viewing the Details of a Post
When they select the View Comments button
Then they should be directed to the Comments list page for the Post
And the list should be in order of creation date with the most recent on top
And the title of the related Post should be displayed at the top of the page
And a link back to the Post should be available

Display the following information for each Comment

  • Subject
  • Content
  • Author's Display Name
  • Creation date (MM/DD/YYYY)

Create a Post

As an author, I would like to be able to create Posts so I can share my thoughts with the world.

Given a user is in the app
When they select the New Post menu option
Then they should be directed to a page with a form for creating a new post

Given the user has entered the relevant information for a Post
When they click the Save button
Then the Post should be saved to the database
And the creation datetime should be automatically set to the current date and time
And the post should automatically be approved
And the user should be recorded as the author of the Post
And the user should be redirected to the new Post's details page

The "relevant information" for a Post is

  • Title
  • Content
  • Category
  • Header Image URL (optional)
  • Publication Date (optional)

View All User Profiles

As an admin, I would like to see a list of all the User Profiles so that I can keep track of who is using the system.

Given the user is an admin in the Tabloid application
When they select the User Profiles menu option
Then they should be directed to the User Profiles list page
And each user in the list should display the full name, the display name and the user type.
And the list should be in ordered alphabetically by user display name

Unsubscribe to a User's Posts

As a reader I would like to unsubscribe from an author's Posts so that I won't see the Posts of author's I am no longer interested in reading.

Given a user is viewing the Post details of an author they are subscribed to
When they select the option to unsubscribe to the author
Then the Subscription end datetime should be updated with the current datetime
And the system should behave as it did before the user had created the Subscription

View Post Details

As a reader, I would like to see the content of a Post so I can read it.

Given a user is viewing a list of Posts
When they select a post to read
Then they should be directed to a Post Detail page that shows the Post Details.

Post Details include:

  • Title
  • Header image (if exists)
  • Content
  • Publication date (MM/DD/YYYY)
  • Author's Display Name

Display Estimated Read Time on a Post

As a reader, I would like know how much time it will take to read a particular Post so that I can determine whether I have time to read it now or I should save it for later.

Given a user is viewing a Post
When they look at the "header" information (title, category, publish date, etc...)
Then they should see a message indicating approximately how many minutes it will take read the post.

NOTE: Use the calculation found on this page https://help.medium.com/hc/en-us/articles/214991667-Read-time.

NOTE: The calculation should round up to the next minute. For example if the calculation determines that a post should take 4:28 to read, the message should indicate that it will take approximately 5 minutes.

NOTE: If the calculation determines it will take 1 minute to read, the message should use the singular form of the word "minute". It should not say "1 minutes".

Create New Reaction

As an admin I would like to be able to add a new Reaction so that I can increase the variety of Reactions available to users of the system.

Prevent Loss of All Admins

As the Tabloid Product Owner, I would like to ensure at least one User Profile has a User Type of admin at all times, so that someone will always be available to administer the system.

Given only one User Profile has administrative rights
When the user attempts to deactivate that last admain
Then they should see an error message instructing them to make someone else an admin before the User Profile can be deactivated

Given only one User Profile has administrative rights
When the user attempts to change the User Type of the last admin
Then they should see an error message instructing them to make someone else an admin before the User Profile can be changed

View Post Details

As a reader, I would like to see the content of a Post so I can read it.

Given a user is viewing a list of Posts
When they select a post to read
Then they should be directed to a Post Detail page that shows the Post Details.

Post Details include:

  • Title
  • Header image (if exists)
  • Content
  • Publication date (MM/DD/YYYY)
  • Author's Display Name

Restrict User Profile Privileges

As the Tabloid application owner I would like the privileges of users throughout the system to be restricted based on their user type so that unauthorized users cannot corrupt, delete or view data in the system.

The privileges of each user type are listed below:

NOTE: Implementing the features outlined in this story will require updating some existing functionality in the system.

NOTE: The dev team may find it useful to break this story into smaller stories in order to facilitate assigning tasks to team members and keeping track of the work.

NOTE: Some of the privileges listed below refer to features that are further down in this backlog. When those future stories are worked, please refer back to this story for a description of the privileges.

NOTE: The order of privileges is does not indicate their priority.

Unauthenticated users can...

  • Register for an account
  • Login to the system

Authors can...

  • Login to the system
  • Logout of the system
  • View any active and published Posts
  • View any Posts they have created
  • Comment on a Post
  • Edit Comments they created
  • Delete Comments they created
  • Add a Reaction to a Post
  • Remove a Reaction from a Post
  • Subscribe to a different User's Posts
  • Unsubscribe from a user's Posts
  • Write a new Post
  • Publish a Post they have created
  • Unpublish a Post they have created
  • Edit a Post they have created
  • Delete a Post they have created
  • Add Tags to a Post they have created
  • Remove Tags from a Post they have created
  • Upload a Profile image
  • Upload a Post Header image

Admins can...

  • Do all the things Author users can do
  • View any User Profile
  • Deactivate a User Profile
  • Change a User Profile's user type
  • Add a Category
  • Edit a Category
  • Remove a Category
  • Add a Tag
  • Edit a Tag
  • Remove a Tag
  • Add a Reaction to the system
  • Edit a Reaction in the system
  • Remove a Reaction from the system
  • Upload a Reaction image
  • Delete any Post
  • Delete any Comment

View All Posts

As a reader, I would like to see a list of all the Posts so that I can choose a post that seems interesting to read.

Given the user is in the Tabloid application
When they select the Posts menu option
Then they should be directed to the Posts list page
And each post in the list should display the title, author and category
And the list should ONLY contain approved Posts
And the list should ONLY contain Posts with a publication date that is in the past
And the list should be in order of publication date with the most recent on top

Add a Reaction to a Post

As a reader I would like to demonstrate my feelings about a particular Post using the power of an image so that I don't have to think of any words to express myself.

Given a user is viewing a Post details page
When the select a Reaction image
Then a record should be added to the database denoting the user's Reaction to the Post
And a count beside the Reaction image should be incremented

Add a Tag to a Post

As an author I would like to be able to associate one or more Tags with one of my Posts so that readers can easily see the Post topics at a glance.

Given the author is viewing Post details
When they select the Manage Tags option
Then they should be presented with a selection of Tags options to associate with the Post

Given the author has selected the Tags they wish to associate with a Post
When they click the Save button
Then the association should be saved to the database
And the user should be directed to the Post details page
And the selected Tags should be displayed on the Post details page

Change a User Profile's Type

As an admin I would like to be able to change a User Profile's user type so that I can promote people to admin users and demote people to authors.

Given the user is viewing the User Profile list
When they select the option to edit an User Profile
Then the user should be directed to a form and given the ability to change the User Profile's user type.

Given the user is finished updating the User Profile information
When they click the Save button
Then the updated User Profile should be saved to the database
And the user should be redirected to the new User Profile list page.

Given the user has decided not to edit the User Profile
When they click the Cancel button
And the user should be redirected to the new User Profile list page.

Upload User Profile Image

As a user I would like to be able to upload an avatar image so that I do not have to find an image online to link to.

Search by Tag

As a reader I would like to be able to find Posts by Tag so that I can more easily find interesting Posts.

Create a Category

As an admin I would like to be able to create a new category so that I can give authors the ability to better classify their posts.

Given an admin is on the Category list page
When they select the Create Category button
Then they should be directed to a form in which they can enter a new category name

Given an admin has entered a Category name
When they click the Save button
Then a new category should be saved to the database
And the admin should be directed to the Category list page

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

View All Posts

As a reader, I would like to see a list of all the Posts so that I can choose a post that seems interesting to read.

Given the user is in the Tabloid application
When they select the Posts menu option
Then they should be directed to the Posts list page
And each post in the list should display the title, author and category
And the list should ONLY contain Posts with a publication date that is in the past
And the list should be in order of publication date with the most recent on top

Delete a Tag

As an admin I would like to be able to delete a Tag so that I can remove any that are not needed.

Given an admin is vising the list of Tags
When they select the Delete option
Then they should be prompted to confirm the deletion

Given the admin wishes to confirm the delete
When they the select the option to confirm
Then the Tag should be removed from the system
And the admin should be directed back to the Tag list

Given the admin decides not to confirm the delete
When they the select the option to reject confirmation
Then the Tag should NOT be removed from the system
And the admin should be directed back to the Tag list

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Upload Post Header Image

As an author I would like to be able to update a header image for a Post so that I do not have to find an image online to link to.

View Current User's Posts

As an author, I would like to see a list of all the Posts I have written so that I can easily view, edit, delete, publish or unpublish them.

Given the user is in the Tabloid application
When they select the My Posts menu option
Then they should be directed to the "My Posts" list page
And the page should display ALL the Posts authored by the logged-in user
And each post in the list should display the title, author and category
And the list should be in order of creation date with the most recent on top

Logout

As a user I would like to be able to logout of the system so that I can ensure that no one else who uses my computer will have access to my Tabloid account.

Given an authenticated user is in the Tabloid application
When they select the Logout option from the menu
Then they should be logged out of the system
And they should be directed to the home page

Register

As a potential user I would like to be able to create an account in the system so that I may use it's features.

Given a potential user wants to create an account in the system
When they select the Register option from the menu
Then they should be directed to a form where they are prompted to enter their User Profile information

Given a potential user has entered their User Profile information
when they click the Register button
Then a new User Profile should be created in the database
And the User Profile should have a user type of Author
And the User Profile's creation datetime should be set to the current date end time
And the user should be directed to the homepage

The User Profile information is:

  • First name
  • Last name
  • Display name
  • Email

Edit a Comment

As a commenter I would like to be able to modify my Comments so that I can correct mistakes or add additional content.

Given the user is viewing the Comment list
When they select the option to edit an Comment
Then the user should be directed to a form and given the ability to change the Comment's information

Given the user is finished updating the Comment information
When they click the Save button
Then the updated Comment should be saved to the database
And the user should be redirected to the new Comment's details page

Given the user has decided not to edit the Comment
When they click the Cancel button
Then the user should be redirected back to the list page

Editable Information

  • Subject
  • Content

View Subscribed Posts on Homepage

As a reader I would like to see a list of Posts written by authors I am subscribed to, so that I can more easily find Posts I may be interested in.

Given A user is on the homepage
When the user has at least one Subscription
Then they should see a list of Posts written by authors they are subscribed to

Edit a Category

As an admin I would like to be able to modify a Category so that I can rephrase the name if I think of something more appropriate.

Given the user is viewing the Category list
When they select the option to edit an Category
Then the user should be directed to a form and given the ability to change the Category's name

Given the user is finished updating the Category information
When they click the Save button
Then the updated Category should be saved to the database
And the user should be redirected to the new Category List page

Given the user has decided not to edit the Category
When they click the Cancel button
Then the user should be redirected back to the list page

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Delete a Category

As an admin I would like to be able to delete a Category so that I can remove any that are not needed.

Given an admin is vising the list of Categories
When they select the Delete option
Then they should be prompted to confirm the deletion

Given the admin wishes to confirm the delete
When they the select the option to confirm
Then the Category should be removed from the system
And the admin should be directed back to the Category list

Given the admin decides not to confirm the delete
When they the select the option to reject confirmation
Then the Category should NOT be removed from the system
And the admin should be directed back to the Category list

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

View All Categories

As an admin I would like to see all the available categories so that I can choose to edit or delete one, or see that I should add a new one.

Given an admin is in the app
When they select the Category Management link in the menu
Then they should be directed to a page that lists all the Category names ordered alphabetically

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Delete a Comment

As a commenter I would like the ability to remove a Comment so that I have created so that I can prevent others from seeing it in the event that I regret what I said.

Given a user is vising the list of Comments
When they select the Delete option
Then they should be prompted to confirm the deletion

Given the user wishes to confirm the delete
When they the select the option to confirm
Then the Comment should be removed from the system
And the user should be directed back to the Comment list

Given the user decides not to confirm the delete
When they the select the option to reject confirmation
Then the Comment should NOT be removed from the system
And the user should be directed back to the Comment list

View Reactions on a Post

As an author I would like to see the various Reactions to my Post so that I can get a sense of readers' responses.

Given a user is viewing a Post details page
When they look below the body of the Post
Then they should see a row of Reaction images with a number beside each to indicate how many users have chosen that Reaction

NOTE: Reaction counts should be visible to anyone who can view the Post.

Basic Authentication

As the Tabloid product owner, I would like all users to be authenticated in order to perform any activity in the system so that the system will be able to record which user created post, comment, etc... and EVENTUALLY restrict access to certain features based on user and user type permissions.

Given an unauthenticated user is in the Tabloid application
When they click any link
Then they should be prompted to login using their email address

Given an unauthenticated user is viewing the login form
When they enter an email address that matches an existing User Profile
Then they should be authenticated into the system
And they should be directed to the application home page

Given an unauthenticated user is viewing the login form
When they enter an email address that does not match an existing User Profile
Then an error message should be displayed
And the user should be given another change to enter a valid email address

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Create a Comment

As a commenter, I would like to be able to add a Comment to a Post so that I can take part in the discussion about a Post.

Given the user is viewing the Details of a Post
When they select the Add Comment menu option
Then they should be directed to a page with a form for creating a new Comment

Given the user has entered the relevant information for a Comment
When they click the Save button
Then the Comment should be saved to the database
And the creation datetime should be automatically set to the current date and time
And the user should be redirected to the new Comments list page for the related Post

The "relevant information" for a Comment is

  • Subject
  • Content

View User Profile Details

As an admin, I would like to see the content of a User Profile so I can read it.

Given a user is viewing a list of User Profiles
When they select a user
Then they should be directed to a User Profile Detail page

User Profile Details include:

  • Full name
  • Avatar image (if exists, else use a default image)
  • Display name
  • Email
  • Creation Date (MM/DD/YYYY)
  • User Profile type

List Posts by Category

As a reader I would like to see all posts in a particular category so that I can more easily find interesting Posts.

Edit a Tag

As an admin I would like to be able to modify a Tag so that I can rephrase the name if I think of something more appropriate.

Given the user is viewing the Tag list
When they select the option to edit an Tag
Then the user should be directed to a form and given the ability to change the Tag's name

Given the user is finished updating the Tag information
When they click the Save button
Then the updated Tag should be saved to the database
And the user should be redirected to the new Tag List page

Given the user has decided not to edit the Tag
When they click the Cancel button
Then the user should be redirected back to the list page

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Basic Authentication

As the Tabloid product owner, I would like all users to be authenticated in order to perform any activity in the system so that the system will be able to record which user created post, comment, etc... and EVENTUALLY restrict access to certain features based on user and user type permissions.

Given an unauthenticated user is in the Tabloid application
When they click any link
Then they should be prompted to login using their email address

Given an unauthenticated user is viewing the login form
When they enter an email address that matches an existing User Profile
Then they should be authenticated into the system
And they should be directed to the application home page

Given an unauthenticated user is viewing the login form
When they enter an email address that does not match an existing User Profile
Then an error message should be displayed
And the user should be given another change to enter a valid email address

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Admins Can Approve Posts

As an admin I would like the ability to approve Posts that I deem appropriate so that the system can provide quality content.

Admins Can Approve Posts

As an admin I would like the ability to approve Posts that I deem appropriate so that the system can provide quality content.

View All Tags

As an admin I would like to see all the available Tags so that I can choose to edit or delete one, or see that I should add a new one.

Given an admin is in the app
When they select the Tag Management link in the menu
Then they should be directed to a page that lists all the Tag names ordered alphabetically

NOTE: For the time being it is acceptable to treat all users as admin users. There is a future story about enforcing user permissions.

Admins Can Un-approve Posts

As an admin I would like the ability to un-approve Posts in case I change my mind about the appropriateness of a Post.

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.