├── backend
└── to-do-list
│ ├── src
│ ├── main
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── java
│ │ │ └── com
│ │ │ └── backend
│ │ │ └── todolist
│ │ │ ├── errorhandler
│ │ │ ├── BadRequestException.java
│ │ │ ├── InvalidPageException.java
│ │ │ ├── ResourceNotFoundException.java
│ │ │ ├── InvalidJwtAuthenticationException.java
│ │ │ ├── ResponseEntityBuilder.java
│ │ │ ├── CustomException.java
│ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── auth
│ │ │ ├── repository
│ │ │ │ └── UserRepository.java
│ │ │ ├── controller
│ │ │ │ ├── UserSigninResponse.java
│ │ │ │ ├── UserSignupResponse.java
│ │ │ │ ├── UserSigninRequest.java
│ │ │ │ ├── UserSignupRequest.java
│ │ │ │ └── UserController.java
│ │ │ ├── jwt
│ │ │ │ ├── JwtConfigurer.java
│ │ │ │ ├── JwtTokenFilter.java
│ │ │ │ └── JwtTokenGenerator.java
│ │ │ ├── service
│ │ │ │ ├── CustomUserDetailsService.java
│ │ │ │ └── UserService.java
│ │ │ └── model
│ │ │ │ └── User.java
│ │ │ ├── ToDoListApplication.java
│ │ │ ├── controller
│ │ │ ├── CountResponse.java
│ │ │ ├── TodoCreateRequest.java
│ │ │ ├── TodoUpdateRequest.java
│ │ │ └── TodoController.java
│ │ │ ├── repository
│ │ │ ├── TodoPagingRepository.java
│ │ │ └── TodoRepository.java
│ │ │ ├── config
│ │ │ ├── SwaggerConfig.java
│ │ │ └── WebSecurityConfiguration.java
│ │ │ ├── model
│ │ │ └── Todo.java
│ │ │ └── service
│ │ │ └── TodoService.java
│ └── test
│ │ └── java
│ │ └── com
│ │ └── backend
│ │ └── todolist
│ │ └── ToDoListApplicationTests.java
│ ├── Dockerfile
│ ├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ ├── maven-wrapper.properties
│ │ └── MavenWrapperDownloader.java
│ ├── .gitignore
│ ├── openshift
│ └── deployment.yaml
│ ├── pom.xml
│ ├── mvnw.cmd
│ └── mvnw
├── frontend
├── public
│ ├── robots.txt
│ ├── favicon.ico
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── index.html
├── src
│ ├── index.js
│ ├── App.css
│ ├── components
│ │ ├── page
│ │ │ ├── NotFound.js
│ │ │ ├── About.js
│ │ │ └── Landing.js
│ │ ├── auth
│ │ │ ├── Signout.js
│ │ │ ├── Signin.js
│ │ │ └── Signup.js
│ │ ├── header
│ │ │ └── Header.js
│ │ └── todo
│ │ │ ├── AddTodo.js
│ │ │ ├── UpdateTodo.js
│ │ │ └── ViewTodos.js
│ └── App.js
├── Dockerfile
├── index.js
├── openshift
│ └── deployment.yaml
└── package.json
├── README.md
└── .gitignore
/backend/to-do-list/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=3001
2 |
--------------------------------------------------------------------------------
/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alvinsenjaya/to-do-list-spring-boot-react/HEAD/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/frontend/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alvinsenjaya/to-do-list-spring-boot-react/HEAD/frontend/public/logo192.png
--------------------------------------------------------------------------------
/frontend/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alvinsenjaya/to-do-list-spring-boot-react/HEAD/frontend/public/logo512.png
--------------------------------------------------------------------------------
/backend/to-do-list/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:11-jre-slim
2 | EXPOSE 3001
3 | COPY target/to-do-list-0.0.1-SNAPSHOT.jar app.jar
4 | ENTRYPOINT ["java","-jar","/app.jar"]
--------------------------------------------------------------------------------
/backend/to-do-list/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/alvinsenjaya/to-do-list-spring-boot-react/HEAD/backend/to-do-list/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/frontend/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | ReactDOM.render(, document.getElementById('root'));
6 |
--------------------------------------------------------------------------------
/frontend/Dockerfile:
--------------------------------------------------------------------------------
1 | #FROM nginxinc/nginx-unprivileged:stable
2 | #COPY build /usr/share/nginx/html
3 |
4 | FROM ubuntu
5 | RUN apt-get update
6 | RUN apt-get install nginx -y
7 | COPY build /var/www/html/
8 | EXPOSE 80
9 | CMD [“nginx”,”-g”,”daemon off;”]
--------------------------------------------------------------------------------
/frontend/src/App.css:
--------------------------------------------------------------------------------
1 | tr.completed {
2 | background-color: #c4ffbd
3 | }
4 |
5 | a {
6 | color: rgb(253, 254, 255);
7 | text-decoration: none;
8 | }
9 | a:hover {
10 | color: rgb(159, 159, 255);
11 | text-decoration: none;
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/src/components/page/NotFound.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default function About() {
4 | return (
5 |
6 |
Not Found
7 |
Requested page not found
8 |
9 | )
10 | }
--------------------------------------------------------------------------------
/frontend/src/components/page/About.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default function About() {
4 | return (
5 |
6 |
About
7 |
This is todo list app version 1.0.0
8 |
9 | )
10 | }
--------------------------------------------------------------------------------
/backend/to-do-list/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/backend/to-do-list/src/test/java/com/backend/todolist/ToDoListApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class ToDoListApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/errorhandler/BadRequestException.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.errorhandler;
2 |
3 | public class BadRequestException extends RuntimeException {
4 | private static final long serialVersionUID = 1L;
5 |
6 | public BadRequestException(String message) {
7 | super(message);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/errorhandler/InvalidPageException.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.errorhandler;
2 |
3 | public class InvalidPageException extends RuntimeException {
4 | private static final long serialVersionUID = 1L;
5 |
6 | public InvalidPageException(String message) {
7 | super(message);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/auth/repository/UserRepository.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.auth.repository;
2 |
3 | import org.springframework.data.jpa.repository.JpaRepository;
4 |
5 | import com.backend.todolist.auth.model.User;
6 |
7 | public interface UserRepository extends JpaRepository {
8 | User findByUsername(String username);
9 | }
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/errorhandler/ResourceNotFoundException.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.errorhandler;
2 |
3 | public class ResourceNotFoundException extends RuntimeException {
4 | private static final long serialVersionUID = 1L;
5 |
6 | public ResourceNotFoundException(String message) {
7 | super(message);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const path = require('path');
3 | const app = express();
4 |
5 | app.use(express.static(path.join(__dirname, 'build')));
6 |
7 | app.get('/', function (req, res) {
8 | res.sendFile(path.join(__dirname, 'build', 'index.html'));
9 | });
10 |
11 | app.listen(3000, () => {
12 | console.log('Listening on port 3000');
13 | });
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/errorhandler/InvalidJwtAuthenticationException.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.errorhandler;
2 |
3 | public class InvalidJwtAuthenticationException extends RuntimeException {
4 | private static final long serialVersionUID = 1L;
5 |
6 | public InvalidJwtAuthenticationException(String message) {
7 | super(message);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/backend/to-do-list/src/main/java/com/backend/todolist/errorhandler/ResponseEntityBuilder.java:
--------------------------------------------------------------------------------
1 | package com.backend.todolist.errorhandler;
2 |
3 | import org.springframework.http.ResponseEntity;
4 |
5 | public class ResponseEntityBuilder {
6 | public static ResponseEntity