diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..1bf7843 Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..bbc3ef0 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Recipin API + +This is my reworked REST API for my built-from-scratch recipe-sharing platform. + +I am rebuilding this API using Spring Boot connected to a PostgreSQL database. \ No newline at end of file diff --git a/pom.xml b/pom.xml index ac0a370..0b020a5 100644 --- a/pom.xml +++ b/pom.xml @@ -17,28 +17,30 @@ 17 + + org.springframework.boot + spring-boot-starter-data-jpa + org.springframework.boot spring-boot-starter-web + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + 1.0.0.Final + - org.springframework.boot - spring-boot-devtools + org.postgresql + postgresql runtime - true org.springframework.boot spring-boot-starter-test test - - javax.persistence - persistence-api - 1.0.2 - provided - diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..3b57a97 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000..ca7394d Binary files /dev/null and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000..08c7d43 Binary files /dev/null and b/src/main/java/.DS_Store differ diff --git a/src/main/java/com/.DS_Store b/src/main/java/com/.DS_Store new file mode 100644 index 0000000..a6801c1 Binary files /dev/null and b/src/main/java/com/.DS_Store differ diff --git a/src/main/java/com/innocuoussymmetry/.DS_Store b/src/main/java/com/innocuoussymmetry/.DS_Store new file mode 100644 index 0000000..f182cda Binary files /dev/null and b/src/main/java/com/innocuoussymmetry/.DS_Store differ diff --git a/src/main/java/com/innocuoussymmetry/recipin/.DS_Store b/src/main/java/com/innocuoussymmetry/recipin/.DS_Store new file mode 100644 index 0000000..21cff0d Binary files /dev/null and b/src/main/java/com/innocuoussymmetry/recipin/.DS_Store differ diff --git a/src/main/java/com/innocuoussymmetry/recipin/RecipinApplication.java b/src/main/java/com/innocuoussymmetry/recipin/RecipinApplication.java index c547976..0f1e8cd 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/RecipinApplication.java +++ b/src/main/java/com/innocuoussymmetry/recipin/RecipinApplication.java @@ -1,9 +1,17 @@ package com.innocuoussymmetry.recipin; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication +@EnableAutoConfiguration +@EnableTransactionManagement +@ComponentScan(basePackages = {"com.innocuoussymmetry.recipin"}) +@EntityScan(basePackages = {"com.innocuoussymmetry.recipin"}) public class RecipinApplication { public static void main(String[] args) { diff --git a/src/main/java/com/innocuoussymmetry/recipin/controllers/UserController.java b/src/main/java/com/innocuoussymmetry/recipin/controllers/UserController.java new file mode 100644 index 0000000..7bca9c1 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/controllers/UserController.java @@ -0,0 +1,35 @@ +package com.innocuoussymmetry.recipin.controllers; + +import com.innocuoussymmetry.recipin.models.User; +import com.innocuoussymmetry.recipin.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.*; + +import java.util.Optional; + +@RestController +@RequestMapping("/user") +public class UserController { + private final UserRepository userRepository; + + @Autowired + public UserController(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @GetMapping + public Iterable getAllUsers() { + return userRepository.findAll(); + } + + @GetMapping("/{id}") + public User getUserById(Integer id) { + Optional maybe = userRepository.findById(id); + if (maybe.isEmpty()) { + return null; + } + + return maybe.get(); + } +} diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/AppList.java b/src/main/java/com/innocuoussymmetry/recipin/models/AppList.java index a18f6ef..1b4f061 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/AppList.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/AppList.java @@ -1,6 +1,7 @@ package com.innocuoussymmetry.recipin.models; -abstract class AppList extends DBEntity { +abstract class AppList { + private Integer id; private String name; private Integer ownerId; diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/DBEntity.java b/src/main/java/com/innocuoussymmetry/recipin/models/DBEntity.java deleted file mode 100644 index 9de408e..0000000 --- a/src/main/java/com/innocuoussymmetry/recipin/models/DBEntity.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.innocuoussymmetry.recipin.models; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -@Entity -abstract class DBEntity { - @Id - @Column(name="id") - @GeneratedValue - private Integer id; -} diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/Friendship.java b/src/main/java/com/innocuoussymmetry/recipin/models/Friendship.java index 780d63f..804da46 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/Friendship.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/Friendship.java @@ -1,10 +1,15 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*; +@Entity @Table(name="friendships") -public class Friendship extends DBEntity { +public class Friendship { + @Id + @Column(name="name") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="senderid") private Integer senderId; @Column(name="targetid") diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/GroceryList.java b/src/main/java/com/innocuoussymmetry/recipin/models/GroceryList.java index d444b44..4007dcc 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/GroceryList.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/GroceryList.java @@ -1,28 +1,18 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*; +@Entity @Table(name="grocerylist") class GroceryList extends AppList { + @Id + @Column(name="id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="name") private String name; + @Column(name="ownerid") private Integer ownerId; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getOwnerId() { - return ownerId; - } - - public void setOwnerId(Integer ownerId) { - this.ownerId = ownerId; - } } \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/Ingredient.java b/src/main/java/com/innocuoussymmetry/recipin/models/Ingredient.java index 8621c93..10d376a 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/Ingredient.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/Ingredient.java @@ -1,10 +1,15 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*; +@Entity @Table(name="ingredient") -public class Ingredient extends DBEntity { +public class Ingredient { + @Id + @Column(name="id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="name") private String name; @Column(name="description") diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/Recipe.java b/src/main/java/com/innocuoussymmetry/recipin/models/Recipe.java index c599918..cc3078e 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/Recipe.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/Recipe.java @@ -1,18 +1,26 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*; import java.util.List; @Table(name="recipe") -public class Recipe extends DBEntity { +public class Recipe { + @Id + @Column(name="id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="name") private String name; + @Column(name="preptime") private String prepTime; + @Column(name="authoruserid") private Integer authorUserId; + @Column(name="description") private String description; + @Column(name="ingredientnames") private List ingredientNames; diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/RecipeList.java b/src/main/java/com/innocuoussymmetry/recipin/models/RecipeList.java index 725e3bc..82d27d4 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/RecipeList.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/RecipeList.java @@ -1,10 +1,15 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*; +@Entity @Table(name="recipelist") public class RecipeList extends AppList { + @Id + @Column(name="id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="ismainlist") private boolean isMainRecipeList; diff --git a/src/main/java/com/innocuoussymmetry/recipin/models/User.java b/src/main/java/com/innocuoussymmetry/recipin/models/User.java index 500fc79..dd1d5eb 100644 --- a/src/main/java/com/innocuoussymmetry/recipin/models/User.java +++ b/src/main/java/com/innocuoussymmetry/recipin/models/User.java @@ -1,19 +1,30 @@ package com.innocuoussymmetry.recipin.models; -import javax.persistence.*; +import jakarta.persistence.*; +@Entity @Table(name="users") -public class User extends DBEntity { +public class User { + @Id + @Column(name="id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + @Column(name="firstname") private String firstName; + @Column(name="lastname") private String lastName; + @Column(name="handle") private String handle; + @Column(name="email") private String email; + @Column(name="isadmin") private boolean isAdmin; + @Column(name="password") private String password; diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/.DS_Store b/src/main/java/com/innocuoussymmetry/recipin/repositories/.DS_Store new file mode 100644 index 0000000..e635c28 Binary files /dev/null and b/src/main/java/com/innocuoussymmetry/recipin/repositories/.DS_Store differ diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/DBSeed.java b/src/main/java/com/innocuoussymmetry/recipin/repositories/DBSeed.java new file mode 100644 index 0000000..628ab6e --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/DBSeed.java @@ -0,0 +1,103 @@ +package com.innocuoussymmetry.recipin.repositories; + +import org.hibernate.cfg.Environment; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.sql.*; +import java.awt.EventQueue; +import java.util.stream.Stream; + +@Configuration +@PropertySource("classpath:/resources/app.properties") +public class DBSeed { + private String constring; + private Connection conn; + + public DBSeed(String constring) { + this.constring = constring; + } + + + private void connect() { + try { + this.conn = DriverManager.getConnection(constring); + } catch (SQLException e) { + System.out.println(e); + } + } + + private void disconnect() { + try { + if (this.conn.isClosed()) { + return; + } + + this.conn.close(); + } catch (SQLException e) { + System.out.println(e); + } + } + + private void seed() { + this.connect(); + + try { + Statement statement = conn.createStatement(); + + String[] orderedPaths = { + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createappusers.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createingredient.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcollection.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/creategrocerylist.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcuisine.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcourse.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipe.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipecomments.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipeingredient.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipecollection.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_usersubscriptions.sql", + "src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_userfriendships.sql", + }; + File[] pathObjects = new File[orderedPaths.length]; + + int i = 0; + for (String path : orderedPaths) { + pathObjects[i] = new File(path); + i++; + } + + i = 0; + while (i < orderedPaths.length) { + String statementBody = ""; + + FileReader fr = new FileReader(pathObjects[i]); + BufferedReader br = new BufferedReader(fr); + var lines = br.lines().toArray(); + + for (var line : lines) { + statementBody += line + " "; + } + + statement.execute(statementBody); + i++; + } + + statement.close(); + } catch (Exception e) { + System.out.println(e); + } + + this.disconnect(); + } + + public static void main(String[] args) { + new DBSeed("jdbc:postgresql://localhost:5432/recipinV2?username=postgres&password=postgres").seed(); + } +} diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/DataSourceConfig.java b/src/main/java/com/innocuoussymmetry/recipin/repositories/DataSourceConfig.java new file mode 100644 index 0000000..64f2cc9 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/DataSourceConfig.java @@ -0,0 +1,22 @@ +package com.innocuoussymmetry.recipin.repositories; + +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.*; + +@Configuration +public class DataSourceConfig { + + @Bean + public DataSource getDataSource() { + DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); + dataSourceBuilder.driverClassName("org.postgresql.Driver"); + dataSourceBuilder.url("jdbc:postgresql://localhost:5432/recipinV2?username=postgres&password=postgres"); + dataSourceBuilder.username("postgres"); + dataSourceBuilder.password("postgres"); + return dataSourceBuilder.build(); + } + +} diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/UserRepository.java b/src/main/java/com/innocuoussymmetry/recipin/repositories/UserRepository.java new file mode 100644 index 0000000..5c99bd5 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/UserRepository.java @@ -0,0 +1,7 @@ +package com.innocuoussymmetry.recipin.repositories; + +import com.innocuoussymmetry.recipin.models.*; +import org.springframework.data.repository.CrudRepository; + +public interface UserRepository extends CrudRepository { +} diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/.DS_Store b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/.DS_Store new file mode 100644 index 0000000..06c39e1 Binary files /dev/null and b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/.DS_Store differ diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createappusers.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createappusers.sql new file mode 100644 index 0000000..f74ed7f --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createappusers.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS appusers ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + firstname varchar NOT NULL, + lastname varchar NOT NULL, + handle varchar NOT NULL UNIQUE, + email varchar NOT NULL UNIQUE, + password varchar NOT NULL, + active boolean NOT NULL, + isadmin boolean NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipecollection.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipecollection.sql new file mode 100644 index 0000000..7b8b27c --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipecollection.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS cmp_recipecollection ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + recipeid int REFERENCES recipe (id), + collectionid int REFERENCES collection (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipeingredient.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipeingredient.sql new file mode 100644 index 0000000..220320f --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_recipeingredient.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS cmp_recipeingredient ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + quantity decimal NOT NULL, + unit varchar NOT NULL, + ingredientid int REFERENCES ingredient (id), + recipeid int REFERENCES recipe (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_userfriendships.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_userfriendships.sql new file mode 100644 index 0000000..f65ae4a --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_userfriendships.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS cmp_userfriendships ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + datecreated varchar NOT NULL, + active boolean NOT NULL, + pending boolean NOT NULL, + dateterminated varchar, + senderid int REFERENCES appusers (id), + targetid int REFERENCES appusers (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_usersubscriptions.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_usersubscriptions.sql new file mode 100644 index 0000000..b60405b --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcmp_usersubscriptions.sql @@ -0,0 +1,6 @@ +CREATE TABLE IF NOT EXISTS cmp_usersubscriptions ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + collectionid int REFERENCES collection (id), + usermemberid int REFERENCES appusers (id), + active boolean NOT NULL +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcollection.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcollection.sql new file mode 100644 index 0000000..d391887 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcollection.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS collection ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + active boolean NOT NULL, + ismaincollection boolean NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL, + ownerid int REFERENCES appusers (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcourse.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcourse.sql new file mode 100644 index 0000000..db21ebe --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcourse.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS course ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL, + active boolean NOT NULL +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcuisine.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcuisine.sql new file mode 100644 index 0000000..981547f --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createcuisine.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS cuisine ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL, + active boolean NOT NULL +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/creategrocerylist.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/creategrocerylist.sql new file mode 100644 index 0000000..04494f2 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/creategrocerylist.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS grocerylist ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + active boolean NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL, + ownerid int REFERENCES appusers (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createingredient.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createingredient.sql new file mode 100644 index 0000000..618bc0e --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createingredient.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS ingredient ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + description varchar, + datecreated varchar NOT NULL, + createdbyid int REFERENCES appusers (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipe.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipe.sql new file mode 100644 index 0000000..7060266 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipe.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS recipe ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + name varchar NOT NULL, + preptime varchar NOT NULL, + datecreated varchar NOT NULL, + datemodified varchar NOT NULL, + description varchar, + authoruserid int REFERENCES appusers (id), + cuisineid int REFERENCES cuisine (id), + courseid int REFERENCES course (id) +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipecomments.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipecomments.sql new file mode 100644 index 0000000..d3b8f06 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/create/createrecipecomments.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS recipecomments ( + id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + commentbody varchar NOT NULL, + datecreated varchar NOT NULL, + recipeid int REFERENCES recipe (id) NOT NULL, + authorid int REFERENCES appusers (id) NOT NULL +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/checksubscription.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/checksubscription.sql new file mode 100644 index 0000000..f84afd9 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/checksubscription.sql @@ -0,0 +1,3 @@ +-- SELECT * FROM cmp_usersubscriptions +-- WHERE usermemberid = $1 +-- AND collectionid = $2; \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/friendships.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/friendships.sql new file mode 100644 index 0000000..cf433ad --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/friendships.sql @@ -0,0 +1,13 @@ +SELECT + recipin.cmp_userfriendships.id, + recipin.cmp_userfriendships.datecreated, + recipin.appusers.id, + recipin.appusers.firstname, + recipin.appusers.lastname, + recipin.appusers.handle, + recipin.appusers.email +FROM recipin.cmp_userfriendships +INNER JOIN recipin.appusers +ON recipin.appusers.id = recipin.cmp_userfriendships.targetid +WHERE senderid = $1 OR targetid = $1 +AND cmp_userfriendships.active = true; \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/setupbrowser.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/setupbrowser.sql new file mode 100644 index 0000000..e89de0b --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/derived/setupbrowser.sql @@ -0,0 +1,5 @@ +-- TO DO +-- run a query that selects: +-- 1) all recipes from a user's own collection +-- 2) all recipes from user's subscribed collections +-- 3) all matching a given user id \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/allaccessiblerecipes.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/allaccessiblerecipes.sql new file mode 100644 index 0000000..e662dd5 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/allaccessiblerecipes.sql @@ -0,0 +1,9 @@ +SELECT * FROM recipin.recipe +WHERE authoruserid = $1 +OR authoruserid IN ( + SELECT targetid FROM recipin.cmp_userfriendships + WHERE senderid = $1 + UNION + SELECT senderid FROM recipin.cmp_userfriendships + WHERE targetid =$ 1 +); \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/alloriginalrecipes.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/alloriginalrecipes.sql new file mode 100644 index 0000000..a2877db --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/alloriginalrecipes.sql @@ -0,0 +1,2 @@ +SELECT * FROM recipin.recipe +WHERE authorid = $1; \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/friendshipbyid.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/friendshipbyid.sql new file mode 100644 index 0000000..1885b14 --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/friendshipbyid.sql @@ -0,0 +1,25 @@ +SELECT + recipin.cmp_userfriendships.id, + recipin.cmp_userfriendships.datecreated, + recipin.appusers.id, + recipin.appusers.firstname, + recipin.appusers.lastname, + recipin.appusers.handle, + recipin.appusers.email +FROM recipin.cmp_userfriendships +INNER JOIN recipin.appusers +ON recipin.appusers.id = recipin.cmp_userfriendships.senderid +WHERE recipin.cmp_userfriendships.id = $1 +UNION +SELECT + recipin.cmp_userfriendships.id, + recipin.cmp_userfriendships.datecreated, + recipin.appusers.id, + recipin.appusers.firstname, + recipin.appusers.lastname, + recipin.appusers.handle, + recipin.appusers.email +FROM recipin.cmp_userfriendships +INNER JOIN recipin.appusers +ON recipin.appusers.id = recipin.cmp_userfriendships.targetid +WHERE recipin.cmp_userfriendships.id = $1; \ No newline at end of file diff --git a/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/getsubscriptions.sql b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/getsubscriptions.sql new file mode 100644 index 0000000..c019fdc --- /dev/null +++ b/src/main/java/com/innocuoussymmetry/recipin/repositories/sql/get/getsubscriptions.sql @@ -0,0 +1,13 @@ +SELECT + recipin.cmp_usersubscriptions.collectionid as collectionid, + recipin.collection.ownerid as ownerid, + recipin.cmp_usersubscriptions.usermemberid as memberid, + recipin.collection.name as collectionname, + recipin.appusers.firstname as owner_first, + recipin.appusers.lastname as owner_last +FROM recipin.collection +INNER JOIN recipin.appusers +ON recipin.collection.ownerid = recipin.appusers.id +INNER JOIN recipin.cmp_usersubscriptions +ON recipin.collection.id = recipin.cmp_usersubscriptions.collectionid +WHERE recipin.cmp_usersubscriptions.usermemberid = $1; \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..1374c32 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,2 @@ - +spring.datasource.url="jdbc:postgresql://localhost:5432/recipinV2?username=postgres&password=postgres" +spring.datasource.driver-class-name="org.postgresql"