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"