diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
index 8edf04ec..ffa92413 100644
--- a/gradle/dependencies.gradle
+++ b/gradle/dependencies.gradle
@@ -17,7 +17,7 @@ ext {
aws : '1.11.221', // AWS Java SDK
flyway : '4.2.0', // DB migrations
connectorj : '5.1.44', // JDBC MYSQL driver
- jooq : '3.10.7', // jOOQ
+ jooq : '3.11.1', // jOOQ
hashids : '1.0.3', // Id hashing
failsafe : '1.0.4', // retry and circuit breakers
jsoup : '1.10.3', // DOM parsing library
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/DefaultCatalog.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/DefaultCatalog.java
index f3f5696f..91eecdc1 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/DefaultCatalog.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/DefaultCatalog.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated;
@@ -20,14 +20,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class DefaultCatalog extends CatalogImpl {
- private static final long serialVersionUID = 2021664633;
+ private static final long serialVersionUID = -781331110;
/**
* The reference instance of
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Indexes.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Indexes.java
index f12b2401..ecb7fb8e 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Indexes.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Indexes.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated;
@@ -24,7 +24,7 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Keys.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Keys.java
index d642ce17..8ea012c3 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Keys.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Keys.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated;
@@ -32,7 +32,7 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/SjCms.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/SjCms.java
index 560dc26a..5e840812 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/SjCms.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/SjCms.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated;
@@ -28,14 +28,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class SjCms extends SchemaImpl {
- private static final long serialVersionUID = 805517808;
+ private static final long serialVersionUID = -2100339815;
/**
* The reference instance of sj_cms
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Tables.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Tables.java
index 2d742240..42f0b863 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Tables.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/Tables.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated;
@@ -20,7 +20,7 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/AppTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/AppTable.java
index a7e578cf..5ea3d8e5 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/AppTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/AppTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -16,9 +16,11 @@
import javax.annotation.Generated;
import org.jooq.Field;
+import org.jooq.ForeignKey;
import org.jooq.Identity;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -33,14 +35,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class AppTable extends TableImpl {
- private static final long serialVersionUID = 459811499;
+ private static final long serialVersionUID = 1835385312;
/**
* The reference instance of sj_cms.app
@@ -96,7 +98,11 @@ private AppTable(Name alias, Table aliased) {
}
private AppTable(Name alias, Table aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public AppTable(Table child, ForeignKey key) {
+ super(child, key, APP);
}
/**
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTable.java
index d43ad122..2fb8f054 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -8,6 +8,7 @@
import com.stubbornjava.cms.server.generated.Keys;
import com.stubbornjava.cms.server.generated.SjCms;
import com.stubbornjava.cms.server.generated.tables.records.PostRecord;
+import com.stubbornjava.cms.server.post.DraftStatus;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -21,6 +22,7 @@
import org.jooq.Identity;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -35,14 +37,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class PostTable extends TableImpl {
- private static final long serialVersionUID = 1003277514;
+ private static final long serialVersionUID = -136999325;
/**
* The reference instance of sj_cms.post
@@ -85,7 +87,7 @@ public Class getRecordType() {
/**
* The column sj_cms.post.draft_status.
*/
- public final TableField DRAFT_STATUS = createField("draft_status", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, "");
+ public final TableField DRAFT_STATUS = createField("draft_status", org.jooq.impl.SQLDataType.VARCHAR(255).nullable(false), this, "", new org.jooq.impl.EnumConverter(java.lang.String.class, com.stubbornjava.cms.server.post.DraftStatus.class));
/**
* The column sj_cms.post.last_update_ts.
@@ -133,7 +135,11 @@ private PostTable(Name alias, Table aliased) {
}
private PostTable(Name alias, Table aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public PostTable(Table child, ForeignKey key) {
+ super(child, key, POST);
}
/**
@@ -184,6 +190,10 @@ public List> getKeys() {
return Arrays.>asList(Keys.POST_APP_ID_FK);
}
+ public AppTable app() {
+ return new AppTable(this, Keys.POST_APP_ID_FK);
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagLinksTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagLinksTable.java
index fe25f49c..85e35e69 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagLinksTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagLinksTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -18,6 +18,7 @@
import org.jooq.ForeignKey;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -32,14 +33,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class PostTagLinksTable extends TableImpl {
- private static final long serialVersionUID = 267947263;
+ private static final long serialVersionUID = -1848210335;
/**
* The reference instance of sj_cms.post_tag_links
@@ -90,7 +91,11 @@ private PostTagLinksTable(Name alias, Table aliased) {
}
private PostTagLinksTable(Name alias, Table aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public PostTagLinksTable(Table child, ForeignKey key) {
+ super(child, key, POST_TAG_LINKS);
}
/**
@@ -133,6 +138,14 @@ public List> getKeys() {
return Arrays.>asList(Keys.POST_TAG_LINKS_POST_ID_FK, Keys.POST_TAG_LINKS_POST_TAG_ID_FK);
}
+ public PostTable post() {
+ return new PostTable(this, Keys.POST_TAG_LINKS_POST_ID_FK);
+ }
+
+ public PostTagTable postTag() {
+ return new PostTagTable(this, Keys.POST_TAG_LINKS_POST_TAG_ID_FK);
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagTable.java
index 331b11e6..9ee0d812 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/PostTagTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -20,6 +20,7 @@
import org.jooq.Identity;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -34,14 +35,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class PostTagTable extends TableImpl {
- private static final long serialVersionUID = 1272857439;
+ private static final long serialVersionUID = 1255493924;
/**
* The reference instance of sj_cms.post_tag
@@ -102,7 +103,11 @@ private PostTagTable(Name alias, Table aliased) {
}
private PostTagTable(Name alias, Table aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public PostTagTable(Table child, ForeignKey key) {
+ super(child, key, POST_TAG);
}
/**
@@ -153,6 +158,10 @@ public List> getKeys() {
return Arrays.>asList(Keys.POST_TAG_APP_ID_FK);
}
+ public AppTable app() {
+ return new AppTable(this, Keys.POST_TAG_APP_ID_FK);
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/UserTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/UserTable.java
index b47543b1..e92ea920 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/UserTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/UserTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -16,9 +16,11 @@
import javax.annotation.Generated;
import org.jooq.Field;
+import org.jooq.ForeignKey;
import org.jooq.Identity;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -33,14 +35,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class UserTable extends TableImpl {
- private static final long serialVersionUID = 1153318743;
+ private static final long serialVersionUID = -334397364;
/**
* The reference instance of sj_cms.user
@@ -111,7 +113,11 @@ private UserTable(Name alias, Table aliased) {
}
private UserTable(Name alias, Table aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public UserTable(Table child, ForeignKey key) {
+ super(child, key, USER);
}
/**
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/_FlywayTable.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/_FlywayTable.java
index 51b82d13..92db0391 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/_FlywayTable.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/_FlywayTable.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables;
@@ -16,8 +16,10 @@
import javax.annotation.Generated;
import org.jooq.Field;
+import org.jooq.ForeignKey;
import org.jooq.Index;
import org.jooq.Name;
+import org.jooq.Record;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
@@ -32,14 +34,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class _FlywayTable extends TableImpl<_FlywayRecord> {
- private static final long serialVersionUID = -278345391;
+ private static final long serialVersionUID = 783815642;
/**
* The reference instance of sj_cms._flyway
@@ -130,7 +132,11 @@ private _FlywayTable(Name alias, Table<_FlywayRecord> aliased) {
}
private _FlywayTable(Name alias, Table<_FlywayRecord> aliased, Field>[] parameters) {
- super(alias, null, aliased, parameters, "");
+ super(alias, null, aliased, parameters, DSL.comment(""));
+ }
+
+ public _FlywayTable(Table child, ForeignKey key) {
+ super(child, key, _FLYWAY);
}
/**
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/AppRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/AppRecord.java
index 0f211cd1..62bf1998 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/AppRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/AppRecord.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
@@ -23,14 +23,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class AppRecord extends UpdatableRecordImpl implements Record3 {
- private static final long serialVersionUID = -116866134;
+ private static final long serialVersionUID = 1017870689;
/**
* Setter for sj_cms.app.app_id.
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostRecord.java
index 21e39293..98016aae 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostRecord.java
@@ -1,10 +1,11 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
import com.stubbornjava.cms.server.generated.tables.PostTable;
+import com.stubbornjava.cms.server.post.DraftStatus;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -24,14 +25,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
-public class PostRecord extends UpdatableRecordImpl implements Record10 {
+public class PostRecord extends UpdatableRecordImpl implements Record10 {
- private static final long serialVersionUID = 889636109;
+ private static final long serialVersionUID = -687257285;
/**
* Setter for sj_cms.post.post_id.
@@ -106,15 +107,15 @@ public String getMetadesc() {
/**
* Setter for sj_cms.post.draft_status.
*/
- public void setDraftStatus(String value) {
+ public void setDraftStatus(DraftStatus value) {
set(5, value);
}
/**
* Getter for sj_cms.post.draft_status.
*/
- public String getDraftStatus() {
- return (String) get(5);
+ public DraftStatus getDraftStatus() {
+ return (DraftStatus) get(5);
}
/**
@@ -193,7 +194,7 @@ public Record1 key() {
* {@inheritDoc}
*/
@Override
- public Row10 fieldsRow() {
+ public Row10 fieldsRow() {
return (Row10) super.fieldsRow();
}
@@ -201,7 +202,7 @@ public Row10 valuesRow() {
+ public Row10 valuesRow() {
return (Row10) super.valuesRow();
}
@@ -249,7 +250,7 @@ public Field field5() {
* {@inheritDoc}
*/
@Override
- public Field field6() {
+ public Field field6() {
return PostTable.POST.DRAFT_STATUS;
}
@@ -329,7 +330,7 @@ public String component5() {
* {@inheritDoc}
*/
@Override
- public String component6() {
+ public DraftStatus component6() {
return getDraftStatus();
}
@@ -409,7 +410,7 @@ public String value5() {
* {@inheritDoc}
*/
@Override
- public String value6() {
+ public DraftStatus value6() {
return getDraftStatus();
}
@@ -494,7 +495,7 @@ public PostRecord value5(String value) {
* {@inheritDoc}
*/
@Override
- public PostRecord value6(String value) {
+ public PostRecord value6(DraftStatus value) {
setDraftStatus(value);
return this;
}
@@ -539,7 +540,7 @@ public PostRecord value10(String value) {
* {@inheritDoc}
*/
@Override
- public PostRecord values(Long value1, Integer value2, String value3, String value4, String value5, String value6, LocalDateTime value7, LocalDateTime value8, LocalDate value9, String value10) {
+ public PostRecord values(Long value1, Integer value2, String value3, String value4, String value5, DraftStatus value6, LocalDateTime value7, LocalDateTime value8, LocalDate value9, String value10) {
value1(value1);
value2(value2);
value3(value3);
@@ -567,7 +568,7 @@ public PostRecord() {
/**
* Create a detached, initialised PostRecord
*/
- public PostRecord(Long postId, Integer appId, String title, String slug, String metadesc, String draftStatus, LocalDateTime lastUpdateTs, LocalDateTime dateCreatedTs, LocalDate dateCreated, String contentTemplate) {
+ public PostRecord(Long postId, Integer appId, String title, String slug, String metadesc, DraftStatus draftStatus, LocalDateTime lastUpdateTs, LocalDateTime dateCreatedTs, LocalDate dateCreated, String contentTemplate) {
super(PostTable.POST);
set(0, postId);
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagLinksRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagLinksRecord.java
index 8bf10d0e..d535be4b 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagLinksRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagLinksRecord.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
@@ -20,14 +20,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class PostTagLinksRecord extends UpdatableRecordImpl implements Record2 {
- private static final long serialVersionUID = -1450313982;
+ private static final long serialVersionUID = 1793690979;
/**
* Setter for sj_cms.post_tag_links.post_id.
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagRecord.java
index 3cf6ed61..9fca373e 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/PostTagRecord.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
@@ -23,14 +23,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class PostTagRecord extends UpdatableRecordImpl implements Record4 {
- private static final long serialVersionUID = 1702429170;
+ private static final long serialVersionUID = 910558441;
/**
* Setter for sj_cms.post_tag.post_tag_id.
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/UserRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/UserRecord.java
index 49039774..e4a6c25d 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/UserRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/UserRecord.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
@@ -23,14 +23,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class UserRecord extends UpdatableRecordImpl implements Record6 {
- private static final long serialVersionUID = 1528164827;
+ private static final long serialVersionUID = 146483068;
/**
* Setter for sj_cms.user.user_id.
diff --git a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/_FlywayRecord.java b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/_FlywayRecord.java
index 7b154d1d..16f46468 100644
--- a/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/_FlywayRecord.java
+++ b/stubbornjava-cms-server/src/generated/java/com/stubbornjava/cms/server/generated/tables/records/_FlywayRecord.java
@@ -1,6 +1,6 @@
/*
* This file is generated by jOOQ.
-*/
+ */
package com.stubbornjava.cms.server.generated.tables.records;
@@ -23,14 +23,14 @@
@Generated(
value = {
"http://www.jooq.org",
- "jOOQ version:3.10.7"
+ "jOOQ version:3.11.1"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class _FlywayRecord extends UpdatableRecordImpl<_FlywayRecord> implements Record10 {
- private static final long serialVersionUID = 2003062080;
+ private static final long serialVersionUID = -1307989129;
/**
* Setter for sj_cms._flyway.installed_rank.
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/CMSMigrations.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/CMSMigrations.java
index f4de2958..dc050e47 100644
--- a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/CMSMigrations.java
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/CMSMigrations.java
@@ -3,19 +3,20 @@
import java.util.List;
import org.flywaydb.core.Flyway;
+import org.jooq.codegen.GenerationTool;
import org.jooq.lambda.Unchecked;
-import org.jooq.util.GenerationTool;
-import org.jooq.util.jaxb.Configuration;
-import org.jooq.util.jaxb.Database;
-import org.jooq.util.jaxb.ForcedType;
-import org.jooq.util.jaxb.Generate;
-import org.jooq.util.jaxb.Generator;
-import org.jooq.util.jaxb.Jdbc;
-import org.jooq.util.jaxb.Strategy;
-import org.jooq.util.jaxb.Target;
-import org.jooq.util.mysql.MySQLDatabase;
+import org.jooq.meta.jaxb.Configuration;
+import org.jooq.meta.jaxb.Database;
+import org.jooq.meta.jaxb.ForcedType;
+import org.jooq.meta.jaxb.Generate;
+import org.jooq.meta.jaxb.Generator;
+import org.jooq.meta.jaxb.Jdbc;
+import org.jooq.meta.jaxb.Strategy;
+import org.jooq.meta.jaxb.Target;
+import org.jooq.meta.mysql.MySQLDatabase;
import com.mysql.jdbc.Driver;
+import com.stubbornjava.cms.server.post.DraftStatus;
import com.stubbornjava.common.db.CustomGeneratorStrategy;
import com.stubbornjava.common.db.JooqConfig;
import com.zaxxer.hikari.HikariDataSource;
@@ -36,6 +37,11 @@ public static void migrate() {
public static void codegen() throws Exception {
List forcedTypes = JooqConfig.defaultForcedTypes();
+ forcedTypes.add(new ForcedType()
+ .withUserType(DraftStatus.class.getName())
+ .withEnumConverter(true)
+ .withExpression(".*draft_status.*"));
+
HikariDataSource ds = CMSConnectionPools.processing();
Configuration configuration = new Configuration()
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/DraftStatus.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/DraftStatus.java
new file mode 100644
index 00000000..b2df81e8
--- /dev/null
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/DraftStatus.java
@@ -0,0 +1,9 @@
+package com.stubbornjava.cms.server.post;
+
+public enum DraftStatus {
+ DELETED,
+ DRAFT,
+ PUBLISHED,
+ REVIEW,
+ SCHEDULED
+}
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/FullPost.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/FullPost.java
index 1f5db5a5..baf95c24 100644
--- a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/FullPost.java
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/FullPost.java
@@ -18,7 +18,7 @@ public class FullPost {
private final String title;
private final String slug;
private final String metadesc;
- private final String draftStatus;
+ private final DraftStatus draftStatus;
private final LocalDateTime lastUpdateTs;
private final LocalDateTime dateCreatedTs;
private final LocalDate dateCreated;
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Post.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Post.java
index b2d7377d..a7dbdce4 100644
--- a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Post.java
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Post.java
@@ -16,7 +16,7 @@ public class Post {
private final String title;
private final String slug;
private final String metadesc;
- private final String draftStatus;
+ private final DraftStatus draftStatus;
private final LocalDateTime lastUpdateTs;
private final LocalDateTime dateCreatedTs;
private final LocalDate dateCreated;
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostInfo.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostInfo.java
new file mode 100644
index 00000000..54e0eef8
--- /dev/null
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostInfo.java
@@ -0,0 +1,19 @@
+package com.stubbornjava.cms.server.post;
+
+import java.time.LocalDate;
+import java.util.List;
+
+import lombok.Builder;
+import lombok.Singular;
+import lombok.Value;
+
+@Value
+@Builder(toBuilder=true)
+public class PostInfo {
+ private final long postId;
+ private final int appId;
+ private final String title;
+ private final String slug;
+ private final LocalDate dateCreated;
+ @Singular private final List tags;
+}
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostSearch.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostSearch.java
new file mode 100644
index 00000000..ae98008c
--- /dev/null
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostSearch.java
@@ -0,0 +1,16 @@
+package com.stubbornjava.cms.server.post;
+
+import java.util.Set;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.Singular;
+
+@Data
+@Builder(toBuilder=true)
+public class PostSearch {
+ private final int appId;
+ @Singular private final Set excludePostIds;
+ @Singular private final Set tagNames;
+ private final Integer limit;
+}
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostTags.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostTags.java
index da9b9fc5..5293ef6b 100644
--- a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostTags.java
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/PostTags.java
@@ -1,19 +1,32 @@
package com.stubbornjava.cms.server.post;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
-import java.util.Set;
+import java.util.Map;
import org.jooq.DSLContext;
+import org.jooq.Field;
import org.jooq.lambda.Seq;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.stubbornjava.cms.server.CMSBootstrap;
+import com.stubbornjava.cms.server.CmsDSLs;
import com.stubbornjava.cms.server.generated.Tables;
+import com.stubbornjava.cms.server.generated.tables.PostTable;
+import com.stubbornjava.cms.server.generated.tables.PostTagLinksTable;
import com.stubbornjava.cms.server.generated.tables.PostTagTable;
import com.stubbornjava.cms.server.generated.tables.records.PostTagLinksRecord;
import com.stubbornjava.cms.server.generated.tables.records.PostTagRecord;
+import com.stubbornjava.common.Multimaps;
import com.stubbornjava.common.db.Dao;
public class PostTags {
private PostTags() {}
+ private static final PostTable post = Tables.POST;
+ private static final PostTagTable postTag = Tables.POST_TAG;
+ private static final PostTagLinksTable postTagLinks = Tables.POST_TAG_LINKS;
private static final Dao postTagDao = new Dao<>(Tables.POST_TAG, PostTags::fromRecord, PostTags::toRecord);
@@ -21,11 +34,25 @@ public static PostTag create(DSLContext ctx, PostTag tag) {
return postTagDao.insertReturning(ctx, tag);
}
- public static List findPostTagsByName(DSLContext ctx, int appId, Set tags) {
+ public static List findPostTagsByName(DSLContext ctx, int appId, Collection tags) {
return postTagDao.fetch(ctx, pt -> pt.APP_ID.eq(appId)
.and(pt.NAME.in(tags)));
}
+ public static Multimap findTagsForPosts(DSLContext ctx, int appId, Collection postIds) {
+ List> fields = Lists.newArrayList(postTagLinks.POST_ID);
+ fields.addAll(Arrays.asList(postTag.fields()));
+ Map> tags = ctx.select(fields)
+ .from(postTag)
+ .join(postTagLinks)
+ .on(postTag.POST_TAG_ID.eq(postTagLinks.POST_TAG_ID))
+ .where(postTagLinks.POST_ID.in(postIds))
+ .fetchGroups(postTagLinks.POST_ID, record -> {
+ return PostTags.fromRecord(record.into(postTag));
+ });
+ return Multimaps.newListMultimap(tags);
+ }
+
/*
* There are some race conditions here if there's two updates
* at the same time but good enough for now.
@@ -52,6 +79,11 @@ static PostTag fromRecord(PostTagRecord record) {
}
public static void main(String[] args) {
-
+ CMSBootstrap.run(() -> {
+ CmsDSLs.transactional().transaction(ctx -> {
+ Multimap results = findTagsForPosts(ctx, 1, Lists.newArrayList(1L, 2L));
+ System.out.println();
+ });
+ });
}
}
diff --git a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Posts.java b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Posts.java
index 52dff157..15c68db7 100644
--- a/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Posts.java
+++ b/stubbornjava-cms-server/src/main/java/com/stubbornjava/cms/server/post/Posts.java
@@ -1,41 +1,133 @@
package com.stubbornjava.cms.server.post;
+import java.util.Collection;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
+import org.jooq.Condition;
import org.jooq.DSLContext;
+import org.jooq.Field;
+import org.jooq.impl.DSL;
+import org.jooq.lambda.Seq;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
import com.stubbornjava.cms.server.generated.Tables;
import com.stubbornjava.cms.server.generated.tables.PostTable;
+import com.stubbornjava.cms.server.generated.tables.PostTagLinksTable;
+import com.stubbornjava.cms.server.generated.tables.PostTagTable;
import com.stubbornjava.cms.server.generated.tables.records.PostRecord;
import com.stubbornjava.common.db.Dao;
public class Posts {
private Posts() {}
+ private static final PostTable post = Tables.POST;
+ private static final PostTagTable postTag = Tables.POST_TAG;
+ private static final PostTagLinksTable postTagLinks = Tables.POST_TAG_LINKS;
private static final Dao postDao = new Dao<>(Tables.POST, Posts::fromRecord, Posts::toRecord);
+ private static final List> postMetaFields = Lists.newArrayList(post.POST_ID, post.APP_ID, post.TITLE, post.SLUG, post.DATE_CREATED);
+
public static FullPost create(DSLContext ctx, int appId, FullPost fullPost) {
Post post = postFromFull(fullPost);
Post created = postDao.insertReturning(ctx, post);
Set tags = fullPost.getTags();
List postTags = PostTags.findPostTagsByName(ctx, appId, tags);
PostTags.linkTagsToPost(ctx, appId, created.getPostId(), postTags);
- return buildFullPost(created);
+ return buildFullPost(created, postTags);
+ }
+
+
+ public static List getRecentPostsExcluding(DSLContext ctx, int appId, Set excludePostIds) {
+ PostSearch search = PostSearch.builder()
+ .appId(appId)
+ .excludePostIds(excludePostIds)
+ .limit(10)
+ .build();
+ return postSearch(ctx, appId, search);
+ }
+
+ public static List getRecentPosts(DSLContext ctx, int appId) {
+ return getRecentPosts(ctx, appId, 10);
+ }
+
+ public static List getRecentPosts(DSLContext ctx, int appId, int num) {
+ PostSearch search = PostSearch.builder()
+ .appId(appId)
+ .limit(num)
+ .build();
+ return postSearch(ctx, appId, search);
+ }
+
+ public static List getRecentPostsWithTag(DSLContext ctx, int appId, String tag) {
+ PostSearch search = PostSearch.builder()
+ .appId(appId)
+ .tagName(tag)
+ .limit(50)
+ .build();
+ return postSearch(ctx, appId, search);
+ }
+
+ private static List postSearch(DSLContext ctx, int appId, PostSearch searchRequest) {
+ Condition condition = DSL.trueCondition();
+
+ if (!searchRequest.getExcludePostIds().isEmpty()) {
+ condition.and(post.POST_ID.notIn(searchRequest.getExcludePostIds()));
+ }
+
+ if (!searchRequest.getTagNames().isEmpty()) {
+ condition.and(post.POST_ID.in(ctx.select(postTagLinks.POST_ID)
+ .from(postTag)
+ .where(postTag.NAME.in(searchRequest.getTagNames()))));
+ }
+
+ int limit = Optional.ofNullable(searchRequest.getLimit()).orElse(50);
+
+ List posts = ctx.select(postMetaFields)
+ .from(post)
+ .where(condition)
+ .orderBy(post.DATE_CREATED.desc(), post.DATE_CREATED_TS.desc())
+ .limit(limit)
+ .fetch(record -> Posts.metaFromRecord(record.into(post)));
+ Multimap tagsByPostId = PostTags.findTagsForPosts(ctx, appId, metaIds(posts));
+
+ List postMetas = Seq.seq(posts).map(p -> {
+ List tagNames = Seq.seq(tagsByPostId.get(p.getPostId())).map(PostTag::getName).toList();
+ return p.toBuilder()
+ .tags(tagNames)
+ .build();
+ }).toList();
+ return postMetas;
+ }
+
+ private static Set ids(Collection posts) {
+ return Seq.seq(posts).map(Post::getPostId).toSet();
+ }
+
+ private static Set metaIds(Collection posts) {
+ return Seq.seq(posts).map(PostInfo::getPostId).toSet();
+ }
+
+ private static List buildFullPosts(DSLContext ctx, List posts, Multimap tagsByPostId) {
+ return Seq.seq(posts)
+ .map(post -> buildFullPost(post, tagsByPostId.get(post.getPostId())))
+ .toList();
}
- static FullPost buildFullPost(Post post) {
+ private static FullPost buildFullPost(Post post, Collection tags) {
return new FullPost(
- post.getPostId(),
- post.getAppId(),
- post.getTitle(),
- post.getSlug(),
- post.getMetadesc(),
- post.getDraftStatus(),
- post.getLastUpdateTs(),
- post.getDateCreatedTs(),
- post.getDateCreated(),
- post.getContentTemplate(),
- null);
+ post.getPostId(),
+ post.getAppId(),
+ post.getTitle(),
+ post.getSlug(),
+ post.getMetadesc(),
+ post.getDraftStatus(),
+ post.getLastUpdateTs(),
+ post.getDateCreatedTs(),
+ post.getDateCreated(),
+ post.getContentTemplate(),
+ Seq.seq(tags).map(PostTag::getName).toSet());
}
static Post postFromFull(FullPost fullPost) {
@@ -82,4 +174,15 @@ static Post fromRecord(PostRecord record) {
record.getContentTemplate()
);
}
+
+ static PostInfo metaFromRecord(PostRecord record) {
+ return new PostInfo(
+ record.getPostId(),
+ record.getAppId(),
+ record.getTitle(),
+ record.getSlug(),
+ record.getDateCreated(),
+ null
+ );
+ }
}
diff --git a/stubbornjava-cms-server/src/main/resources/db/cms/migration/V_2018.02.16.1__initial-schema.sql b/stubbornjava-cms-server/src/main/resources/db/cms/migration/V_2018.02.16.1__initial-schema.sql
index cb982041..4f6919fd 100644
--- a/stubbornjava-cms-server/src/main/resources/db/cms/migration/V_2018.02.16.1__initial-schema.sql
+++ b/stubbornjava-cms-server/src/main/resources/db/cms/migration/V_2018.02.16.1__initial-schema.sql
@@ -56,3 +56,13 @@ CREATE TABLE IF NOT EXISTS post_tag_links (
CONSTRAINT `post_tag_links_post_id_fk` FOREIGN KEY (`post_id`) REFERENCES `post` (`post_id`),
CONSTRAINT `post_tag_links_post_tag_id_fk` FOREIGN KEY (`post_tag_id`) REFERENCES `post_tag` (`post_tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS post_github_file_links (
+ post_id BIGINT NOT NULL,
+ github_owner varchar(255) NOT NULL,
+ github_repo varchar(255) NOT NULL,
+ name varchar(255) NOT NULL,
+ file_path TEXT NOT NULL,
+ PRIMARY KEY (post_id, github_owner, github_repo, name),
+ CONSTRAINT `post_tag_links_post_id_fk` FOREIGN KEY (`post_id`) REFERENCES `post` (`post_id`),
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java
index 9cbbbcab..11d08218 100644
--- a/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java
+++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/HttpClient.java
@@ -18,6 +18,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import okhttp3.Authenticator;
+import okhttp3.Credentials;
import okhttp3.Dispatcher;
import okhttp3.Interceptor;
import okhttp3.Interceptor.Chain;
@@ -26,6 +28,7 @@
import okhttp3.OkHttpClient.Builder;
import okhttp3.Request;
import okhttp3.Response;
+import okhttp3.Route;
import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor.Level;
@@ -56,6 +59,10 @@ public static Interceptor getHeaderInterceptor(String name, String value) {
};
}
+ public static Authenticator basicAuth(String username, String password) {
+ return new BasicAuthenticator(username, password);
+ }
+
// {{start:client}}
private static final OkHttpClient client;
static {
@@ -71,8 +78,6 @@ public static Interceptor getHeaderInterceptor(String name, String value) {
.build();
}
- ;
-
/*
* Global client that can be shared for common HTTP tasks.
*/
@@ -149,4 +154,20 @@ public boolean verify(String hostname, SSLSession session) {
return builder.build();
}
// {{end:trustAllSslClient}}
+
+ private static final class BasicAuthenticator implements Authenticator {
+ private final String username;
+ private final String password;
+
+ public BasicAuthenticator(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
+
+ @Override
+ public Request authenticate(Route route, Response response) throws IOException {
+ String credential = Credentials.basic(username, password);
+ return response.request().newBuilder().header("Authorization", credential).build();
+ }
+ }
}
diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/Multimaps.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/Multimaps.java
new file mode 100644
index 00000000..3e2fedbf
--- /dev/null
+++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/Multimaps.java
@@ -0,0 +1,18 @@
+package com.stubbornjava.common;
+
+import java.util.Map;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
+
+public class Multimaps {
+ private Multimaps() {}
+
+ public static Multimap newListMultimap(Map> input) {
+ Multimap multimap = ArrayListMultimap.create();
+ for (Map.Entry> entry : input.entrySet()) {
+ multimap.putAll(entry.getKey(), entry.getValue());
+ }
+ return multimap;
+ }
+}
diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/db/CustomGeneratorStrategy.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/db/CustomGeneratorStrategy.java
index 6504f3be..1df42a6b 100644
--- a/stubbornjava-common/src/main/java/com/stubbornjava/common/db/CustomGeneratorStrategy.java
+++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/db/CustomGeneratorStrategy.java
@@ -1,7 +1,7 @@
package com.stubbornjava.common.db;
-import org.jooq.util.DefaultGeneratorStrategy;
-import org.jooq.util.Definition;
+import org.jooq.codegen.DefaultGeneratorStrategy;
+import org.jooq.meta.Definition;
public class CustomGeneratorStrategy extends DefaultGeneratorStrategy {
diff --git a/stubbornjava-common/src/main/java/com/stubbornjava/common/db/JooqConfig.java b/stubbornjava-common/src/main/java/com/stubbornjava/common/db/JooqConfig.java
index 5559cdfc..e19e6ad1 100644
--- a/stubbornjava-common/src/main/java/com/stubbornjava/common/db/JooqConfig.java
+++ b/stubbornjava-common/src/main/java/com/stubbornjava/common/db/JooqConfig.java
@@ -9,7 +9,7 @@
import org.jooq.SQLDialect;
import org.jooq.impl.DataSourceConnectionProvider;
import org.jooq.impl.DefaultConfiguration;
-import org.jooq.util.jaxb.ForcedType;
+import org.jooq.meta.jaxb.ForcedType;
import com.google.common.collect.Lists;
diff --git a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Post.java b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Post.java
index 1edde563..bf4b738c 100644
--- a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Post.java
+++ b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Post.java
@@ -11,4 +11,5 @@ public class Post {
@JsonUnwrapped
private final PostMeta postMeta;
private final String content;
+ private final String contentTemplate;
}
diff --git a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/PostMeta.java b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/PostMeta.java
index f33866fc..caae8d28 100644
--- a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/PostMeta.java
+++ b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/PostMeta.java
@@ -12,9 +12,10 @@
@Builder(toBuilder=true)
public class PostMeta {
private final long postId;
+ private final int appId;
private final String title;
- private final String metaDesc;
private final String slug;
+ private final String metaDesc;
@Singular private final List tagOrLibraries;
private final LocalDateTime dateCreated;
public LocalDate dateCreatedShort() {
diff --git a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Posts.java b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Posts.java
index 0265341e..5e71993d 100644
--- a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Posts.java
+++ b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Posts.java
@@ -14,7 +14,12 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import com.stubbornjava.cms.server.CmsDSLs;
+import com.stubbornjava.cms.server.post.DraftStatus;
+import com.stubbornjava.cms.server.post.PostInfo;
+import com.stubbornjava.common.Resources;
import com.stubbornjava.common.Templating;
+import com.stubbornjava.webapp.WebappBoostrap;
import com.stubbornjava.webapp.github.FileContent;
import com.stubbornjava.webapp.github.GitHubSource;
import com.stubbornjava.webapp.post.TagOrLibrary.Type;
@@ -52,18 +57,22 @@ public class Posts {
}
}
- public static List getRecentPostsExcluding(Set excludeIds) {
- return Seq.seq(recentPosts)
- .filter(p -> !excludeIds.contains(p.getPostId()))
- .limit(10).toList();
+ public static List getRecentPostsExcluding(Set excludePostIds) {
+ return CmsDSLs.transactional().transactionResult(ctx -> {
+ return com.stubbornjava.cms.server.post.Posts.getRecentPostsExcluding(ctx, 1, excludePostIds);
+ });
}
- public static List getRecentPosts() {
- return Seq.seq(recentPosts).limit(10).toList();
+ public static List getRecentPosts() {
+ return CmsDSLs.transactional().transactionResult(ctx -> {
+ return com.stubbornjava.cms.server.post.Posts.getRecentPosts(ctx, 1);
+ });
}
- public static List getRecentPosts(int num) {
- return Seq.seq(recentPosts).limit(num).toList();
+ public static List getRecentPosts(int num) {
+ return CmsDSLs.transactional().transactionResult(ctx -> {
+ return com.stubbornjava.cms.server.post.Posts.getRecentPosts(ctx, 1, num);
+ });
}
public static List getRecentPostsWithTag(String tag) {
@@ -111,11 +120,11 @@ private static PostMeta metaFromPost(PostRaw postRaw) {
tagOrLibraries = Seq.seq(tagOrLibraries).sorted(e -> e.getName()).toList();
return PostMeta.builder()
.postId(postRaw.getPostId())
+ .metaDesc(postRaw.getMetaDesc())
.tagOrLibraries(tagOrLibraries)
.dateCreated(postRaw.getDateCreated())
.title(postRaw.getTitle())
.slug(postRaw.getSlug())
- .metaDesc(postRaw.getMetaDesc())
.build();
}
@@ -126,9 +135,38 @@ private static Post postFromMeta(PostRaw postRaw) {
.toMap(fc -> fc.getName());
String content = Templating.instance().renderTemplate("templates/src/posts/" + postRaw.getSlug(), fileContents);
+ String template = Resources.asString("templates/src/posts/" + postRaw.getSlug() + ".hbs");
return Post.builder()
.postMeta(meta)
.content(content)
+ .contentTemplate(template)
.build();
}
+
+ public static void main(String[] args) {
+ WebappBoostrap.run(() -> {
+ List posts = Seq.seq(PostData.getPosts())
+ .map(Posts::postFromMeta)
+ .toList();
+
+ for (Post post : posts) {
+ PostMeta meta = post.getPostMeta();
+ com.stubbornjava.cms.server.post.FullPost newPost = new com.stubbornjava.cms.server.post.FullPost(
+ null,
+ 1,
+ meta.getTitle(),
+ meta.getSlug(),
+ meta.getMetaDesc(),
+ DraftStatus.PUBLISHED,
+ meta.getDateCreated(),
+ meta.getDateCreated(),
+ meta.getDateCreated().toLocalDate(),
+ post.getContentTemplate(),
+ Seq.seq(meta.getTagOrLibraries()).filter(tl -> tl.getType() == Type.Tag).map(x -> x.getName()).toSet());
+ CmsDSLs.transactional().transaction(ctx -> {
+ com.stubbornjava.cms.server.post.FullPost created = com.stubbornjava.cms.server.post.Posts.create(ctx, 1, newPost);
+ });
+ }
+ });
+ }
}
diff --git a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Tags.java b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Tags.java
index 8381ad52..cf78472f 100644
--- a/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Tags.java
+++ b/stubbornjava-webapp/src/main/java/com/stubbornjava/webapp/post/Tags.java
@@ -1,9 +1,15 @@
package com.stubbornjava.webapp.post;
+import java.time.LocalDateTime;
import java.util.List;
import com.google.common.collect.Lists;
+import com.stubbornjava.cms.server.CMSBootstrap;
+import com.stubbornjava.cms.server.CmsDSLs;
+import com.stubbornjava.cms.server.post.PostTag;
+import com.stubbornjava.cms.server.post.PostTags;
+@Deprecated
public class Tags {
private static final List TAGS = Lists.newArrayList();
public static final Tag JSON = addTag(new Tag(811790051562631559L, "JSON"));
@@ -41,4 +47,13 @@ private static Tag addTag(Tag tag) {
public static List getTags() {
return TAGS;
}
+
+ public static void main(String[] args) {
+ CMSBootstrap.run(() -> {
+ for (Tag tag : TAGS) {
+ PostTag postTag = new PostTag(null, 1, tag.getName(), LocalDateTime.now());
+ CmsDSLs.transactional().transaction((ctx) -> PostTags.create(ctx, postTag));
+ }
+ });
+ }
}