Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.3.RELEASE")
}
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
baseName = 'writer-fic'
version = '0.1.0'
}

repositories {
mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = 'UTF-8'

tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-test")
compile("org.springframework.boot:spring-boot-starter-hateoas")

compile("org.projectlombok:lombok")
compile("mysql:mysql-connector-java")
compile("com.h2database:h2")

testCompile("junit:junit")
}
11 changes: 11 additions & 0 deletions src/main/java/fic/writer/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fic.writer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
9 changes: 9 additions & 0 deletions src/main/java/fic/writer/config/AuditConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package fic.writer.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class AuditConfig {
}
28 changes: 28 additions & 0 deletions src/main/java/fic/writer/domain/entity/Actor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package fic.writer.domain.entity;

import lombok.*;

import javax.persistence.*;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Actor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false)
private Long id;
private String name;
private String description;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "actors")
private Set<Book> books;
@OneToMany(cascade = {CascadeType.ALL},
fetch = FetchType.LAZY,
orphanRemoval = true,
mappedBy = "actor")
private Set<ActorState> actorStates;
}
25 changes: 25 additions & 0 deletions src/main/java/fic/writer/domain/entity/ActorState.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package fic.writer.domain.entity;

import lombok.*;

import javax.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(of = "id")
public class ActorState {
@EmbeddedId
private ActorStateId id;
@MapsId("articleId")
@ManyToOne(fetch = FetchType.LAZY)
private Article article;
@MapsId("actorId")
@ManyToOne(fetch = FetchType.LAZY)
private Actor actor;
private String title;
private String content;
}
22 changes: 22 additions & 0 deletions src/main/java/fic/writer/domain/entity/ActorStateId.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fic.writer.domain.entity;

import lombok.*;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

@Embeddable
@NoArgsConstructor
@Getter
@Setter
@Builder
@AllArgsConstructor
@EqualsAndHashCode
public class ActorStateId implements Serializable {
@Column(name = "article_id")
private Long articleId;
@Column(name = "actor_id")
private Long actorId;

}
35 changes: 35 additions & 0 deletions src/main/java/fic/writer/domain/entity/Article.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package fic.writer.domain.entity;

import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EntityListeners(AuditingEntityListener.class)
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@CreatedDate
private Date created;
@LastModifiedDate
private Date lastModify;
@Column(columnDefinition = "text")
private String content;
private String annotation;
@ManyToOne(fetch = FetchType.LAZY)
private Book book;
@OneToMany(cascade = CascadeType.REMOVE)
private Set<ActorState> actorStates;
}
54 changes: 54 additions & 0 deletions src/main/java/fic/writer/domain/entity/Book.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package fic.writer.domain.entity;

import fic.writer.domain.entity.enums.Size;
import fic.writer.domain.entity.enums.State;
import lombok.*;

import javax.persistence.*;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@ManyToOne
private User author;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "book_subauthors",
joinColumns = {@JoinColumn(name = "book_id")},
inverseJoinColumns = {@JoinColumn(name = "user_id")}
)
@Singular("subAuthors")
private Set<User> subAuthors;
@OneToMany(fetch = FetchType.EAGER)
@Singular("source")
private Set<Book> source;
private String description;
@Enumerated
private Size size;
@Enumerated
private State state;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@Singular("articles")
private Set<Article> articles;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "book_genres",
joinColumns = {@JoinColumn(name = "book_id")},
inverseJoinColumns = {@JoinColumn(name = "genre_id")}
)
private Set<Genre> genres;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "book_actors",
joinColumns = {@JoinColumn(name = "book_id")},
inverseJoinColumns = {@JoinColumn(name = "actor_id")}
)
@Singular("actors")
private Set<Actor> actors;
}
23 changes: 23 additions & 0 deletions src/main/java/fic/writer/domain/entity/Genre.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fic.writer.domain.entity;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Genre {
@Id
private Long id;
private String name;
@ManyToMany(mappedBy = "genres", fetch = FetchType.LAZY)
private Set<Book> book;
}
27 changes: 27 additions & 0 deletions src/main/java/fic/writer/domain/entity/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package fic.writer.domain.entity;

import lombok.*;

import javax.persistence.*;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String about;
private String information;
@ManyToMany(mappedBy = "subAuthors", fetch = FetchType.LAZY)
@Singular("booksAsSubAuthor")
private Set<Book> booksAsSubAuthor;
@OneToMany(fetch = FetchType.LAZY)
@Singular("booksAsAuthor")
private Set<Book> booksAsAuthor;
}
22 changes: 22 additions & 0 deletions src/main/java/fic/writer/domain/entity/auth/CustomUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package fic.writer.domain.entity.auth;

import fic.writer.domain.entity.User;
import lombok.*;

import javax.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CustomUser {
@Id
@GeneratedValue
private Long id;
@OneToOne(fetch = FetchType.EAGER)
private User profile;
private String email;
private String password;
}
23 changes: 23 additions & 0 deletions src/main/java/fic/writer/domain/entity/auth/OauthUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fic.writer.domain.entity.auth;

import fic.writer.domain.entity.User;
import lombok.*;

import javax.persistence.*;
import java.util.Date;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OauthUser {
@Id
@GeneratedValue
private Long id;
@OneToOne(fetch = FetchType.EAGER)
private User profile;
private String token;
private Date expireDate;
}
24 changes: 24 additions & 0 deletions src/main/java/fic/writer/domain/entity/dto/ActorDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package fic.writer.domain.entity.dto;

import fic.writer.domain.entity.Actor;
import fic.writer.domain.entity.ActorState;
import lombok.Builder;
import lombok.Data;

import java.util.Set;

@Builder
@Data
public class ActorDto {
private String name;
private String description;
private Set<ActorState> actorStates;

public static ActorDto of(Actor actor) {
return builder()
.name(actor.getName())
.description(actor.getDescription())
.actorStates(actor.getActorStates())
.build();
}
}
23 changes: 23 additions & 0 deletions src/main/java/fic/writer/domain/entity/dto/ActorStateDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fic.writer.domain.entity.dto;

import fic.writer.domain.entity.ActorState;
import fic.writer.domain.entity.ActorStateId;
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class ActorStateDto {
private ActorStateId id;
private String title;
private String content;


public static ActorStateDto of(ActorState actorState) {
return builder()
.id(actorState.getId())
.title(actorState.getTitle())
.content(actorState.getContent())
.build();
}
}
Loading