Skip to content
This repository was archived by the owner on Jan 24, 2023. It is now read-only.

Commit 84f67e0

Browse files
committed
feat(server): Added server template files
1 parent 5ed4fab commit 84f67e0

83 files changed

Lines changed: 885 additions & 5286 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/@simpli/cli-server/generator/index.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,29 @@ module.exports = (api, options) => {
33
api.render('./template')
44
}
55

6-
// additional tooling configurations
7-
if (options.configs) {
8-
api.extendPackage(options.configs)
9-
}
6+
const commonTables = options.serverSetup.commonTables
7+
const dir = options.serverSetup.packageDir
8+
const moduleName = options.serverSetup.moduleName
9+
10+
// From root
11+
api.renderFrom('./injected', 'src/main/AppProvider.kt', `./java/${dir}/AppProvider.kt`)
12+
api.renderFrom('./injected', 'src/main/RouterWrapper.kt', `./java/${dir}/RouterWrapper.kt`)
13+
api.renderFrom('./injected', 'src/main/SwaggerInit.kt', `./java/${dir}/SwaggerInit.kt`)
14+
15+
// Router
16+
api.renderFrom('./injected', 'src/main/module/Router.kt', `../java/${dir}/${moduleName}/Router.kt`)
17+
18+
// Login Controller
19+
api.renderFrom('./injected', 'src/main/module/process/LoginService.kt', `../../java/${dir}/${moduleName}/process/LoginService.kt`)
20+
api.renderFrom('./injected', 'src/main/module/response/LoginResp.kt', `../../java/${dir}/${moduleName}/response/LoginResp.kt`)
21+
api.renderFrom('./injected', 'src/main/dao/LoginServiceDao.kt', `../java/${dir}/dao/LoginServiceDao.kt`)
22+
23+
// Test
24+
api.renderFrom('./injected', 'src/test/module/process/LoginServiceTest.kt', `../../java/${dir}/${moduleName}/process/LoginServiceTest.kt`)
25+
api.renderFrom('./injected', 'src/test/OtherTest.kt', `./java/${dir}/OtherTest.kt`)
26+
27+
commonTables.forEach((table) => {
28+
// const data = { table }
29+
// api.renderFrom('./injected', 'src/main/dao/TemplateDao.kt', `../java/${dir}/dao/${table.modelName}Dao.kt`, data)
30+
})
1031
}

packages/@simpli/cli-server/generator/template/src/main/java/br/com/martinlabs/usecase/AppProvider.kt renamed to packages/@simpli/cli-server/generator/injected/src/main/AppProvider.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
package br.com.martinlabs.usecase
1+
<%_ var packageAddress = options.serverSetup.packageAddress _%>
2+
package <%-packageAddress%>
23

34
import com.google.gson.Gson
45
import com.google.gson.GsonBuilder
@@ -18,11 +19,10 @@ import javax.ws.rs.ext.Provider
1819

1920
/**
2021
* Provides rules for all requests
21-
* @author martinlabs CRUD generator
22+
* @author Simpli© CLI generator
2223
*/
2324
@Provider
2425
class AppProvider : ParamConverterProvider, ContextResolver<Gson>, ContainerResponseFilter {
25-
2626
override fun <T> getConverter(type: Class<T>?, type1: Type?, antns: Array<Annotation>?): ParamConverter<T>? {
2727
return if (type is Date || Date::class.java == type) {
2828
DateParameterConverter() as ParamConverter<T>
@@ -36,33 +36,27 @@ class AppProvider : ParamConverterProvider, ContextResolver<Gson>, ContainerResp
3636
@Throws(IOException::class)
3737
override fun filter(request: ContainerRequestContext,
3838
response: ContainerResponseContext) {
39-
4039
response.headers.add("Access-Control-Allow-Origin", "*")
4140
response.headers.add("Access-Control-Allow-Methods", "POST, GET, DELETE")
4241
response.headers.add("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin, Accept, X-Client-Version, Authorization, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
4342
}
4443

4544
inner class DateParameterConverter : ParamConverter<Date> {
46-
4745
override fun fromString(string: String): Date {
4846
val simpleDateFormat = SimpleDateFormat(DATE_FORMAT)
4947
try {
5048
return simpleDateFormat.parse(string)
5149
} catch (ex: ParseException) {
5250
throw WebApplicationException(ex)
5351
}
54-
5552
}
5653

5754
override fun toString(t: Date): String {
5855
return SimpleDateFormat(DATE_FORMAT).format(t)
5956
}
60-
6157
}
6258

6359
companion object {
64-
6560
val DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssX" // set the DATE_FORMAT to whatever you need
6661
}
67-
6862
}

packages/@simpli/cli-server/generator/template/src/main/java/br/com/martinlabs/usecase/RouterWrapper.kt renamed to packages/@simpli/cli-server/generator/injected/src/main/RouterWrapper.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package br.com.martinlabs.usecase
1+
<%_ var packageAddress = options.serverSetup.packageAddress _%>
2+
<%_ var database = options.serverSetup.connection.database _%>
3+
package <%-packageAddress%>
24

35
import com.google.common.base.Strings
46
import com.simpli.model.EnglishLanguage
@@ -17,11 +19,10 @@ import javax.ws.rs.ext.ExceptionMapper
1719

1820
/**
1921
* Utility class holding properties and methods for all Routers
20-
* @author martinlabs CRUD generator
22+
* @author Simpli© CLI generator
2123
*/
2224
open class RouterWrapper : ExceptionMapper<Throwable> {
23-
24-
protected var pipe = TransactionPipe("jdbc/usecaseDS")
25+
protected var pipe = TransactionPipe("jdbc/<%-database%>DS")
2526

2627
protected val langs: HashMap<String, LanguageHolder> = object : HashMap<String, LanguageHolder>() {
2728
init {
@@ -38,7 +39,6 @@ open class RouterWrapper : ExceptionMapper<Throwable> {
3839
Logger.getLogger(RouterWrapper::class.java.name).log(Level.SEVERE, e.message, e)
3940

4041
if (e is RespException) {
41-
4242
var code = ""
4343
if (e.code != null) {
4444
code = "\"code\": " + e.code + ", "
@@ -66,7 +66,5 @@ open class RouterWrapper : ExceptionMapper<Throwable> {
6666
return if (!matcher.find()) {
6767
null
6868
} else matcher.group(1)
69-
7069
}
71-
7270
}

packages/@simpli/cli-server/generator/template/src/main/java/br/com/martinlabs/usecase/SwaggerInit.kt renamed to packages/@simpli/cli-server/generator/injected/src/main/SwaggerInit.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
package br.com.martinlabs.usecase
1+
<%_ var packageAddress = options.serverSetup.packageAddress _%>
2+
<%_ var serverName = options.serverSetup.serverName _%>
3+
<%_ var moduleName = options.serverSetup.moduleName _%>
4+
<%_ var moduleNameCapitalized = options.serverSetup.capitalizeFirstLetter(moduleName) _%>
5+
package <%-packageAddress%>
26

37
import io.swagger.models.auth.*
48
import io.swagger.jaxrs.config.SwaggerContextService
@@ -10,20 +14,20 @@ import javax.servlet.http.HttpServlet
1014

1115
/**
1216
* Inits the swagger documentation
13-
* @author martinlabs CRUD generator
17+
* @author Simpli© CLI generator
1418
*/
1519
class SwaggerInit : HttpServlet() {
1620
@Throws(ServletException::class)
1721
override fun init(config: ServletConfig) {
1822
val info = Info()
19-
.title("GeneratorUseCase")
20-
.description("Welcome to GeneratorUseCase API documentation.")
23+
.title("<%-serverName%>")
24+
.description("Welcome to <%-serverName%> API documentation.")
2125

2226
val swagger = Swagger().info(info)
2327

24-
swagger.securityDefinition("Authorization",
28+
swagger.securityDefinition("Authorization",
2529
OAuth2Definition()
26-
.implicit("Crud/Login"))
30+
.implicit("<%-moduleNameCapitalized%>/SignIn"))
2731

2832
SwaggerContextService().withServletConfig(config).updateSwagger(swagger)
2933
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<%_ var packageAddress = options.serverSetup.packageAddress _%>
2+
<%_ var userTable = options.serverSetup.userTable _%>
3+
<%_ var accountColumn = options.serverSetup.accountColumn _%>
4+
<%_ var passwordColumn = options.serverSetup.passwordColumn _%>
5+
package <%-packageAddress%>.dao
6+
7+
import <%-packageAddress%>.model.<%-userTable.modelName%>
8+
import com.simpli.model.LanguageHolder
9+
import com.simpli.sql.Dao
10+
import java.sql.Connection
11+
12+
/**
13+
* Responsible for database login operations
14+
* @author Simpli© CLI generator
15+
*/
16+
class LoginServiceDao(con: Connection, lang: LanguageHolder) : Dao(con, lang) {
17+
18+
fun getIdOf<%-userTable.modelName%>(<%-accountColumn.name%>: <%-accountColumn.kotlinType%>?, <%-passwordColumn.name%>: <%-accountColumn.kotlinType%>?): Long {
19+
return nullToZero(selectFirstLong("""
20+
SELECT <%-userTable.idColumn.name%>
21+
FROM <%-userTable.name%>
22+
WHERE <%-accountColumn.name%> = ?
23+
AND <%-passwordColumn.name%> = sha2(?, 256)
24+
""",
25+
<%-accountColumn.name%>, <%-passwordColumn.name%>))
26+
}
27+
28+
fun get<%-userTable.modelName%>(<%-userTable.idColumn.name%>: <%-userTable.idColumn.kotlinType%>): <%-userTable.modelName%>? {
29+
//TODO: review generated method
30+
return selectOne("""
31+
SELECT *
32+
FROM <%-userTable.name%>
33+
WHERE <%-userTable.idColumn.name%> = ?
34+
""", { rs -> <%-userTable.modelName%>.buildAll(rs) }, <%-userTable.idColumn.name%>)
35+
}
36+
}
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
<%_ var packageAddress = options.serverSetup.packageAddress _%>
2+
package <%-packageAddress%>.dao
3+
4+
import <%-packageAddress%>.model.<%-table.modelName%>
5+
import com.google.common.base.Strings
6+
import java.sql.Connection
7+
import java.util.ArrayList
8+
import java.util.HashMap
9+
import com.simpli.model.LanguageHolder
10+
import com.simpli.sql.Dao
11+
12+
/**
13+
* Responsible for <%-table.modelName%> database operations
14+
* @author Simpli© CLI generator
15+
*/
16+
class <%-table.modelName%>Dao(con: Connection, lang: LanguageHolder) : Dao(con, lang) {
17+
18+
fun getOne(<%-table.primariesByComma(true)%>): <%-table.modelName%>? {
19+
//TODO: review generated method
20+
return selectOne("""
21+
SELECT *
22+
FROM <%-table.name%>
23+
WHERE 1 = 1
24+
<%-table.primariesByWhere()%>
25+
""", { rs -> <%-table.modelName%>.buildAll(rs) }, <%-table.primariesByComma(false)%>)
26+
}
27+
28+
fun list(): MutableList<<%-table.modelName%>> {
29+
//TODO: review generated method
30+
return selectList("""
31+
SELECT *
32+
FROM <%-table.name%>
33+
<%_ if (table.isRemovable) _%>
34+
WHERE <%-table.removableColumn.name%> = 1
35+
<%_ } _%>
36+
""", { rs -> <%-table.modelName%>.buildAll(rs) })
37+
}
38+
39+
fun list(
40+
query: String?,
41+
page: Int?,
42+
limit: Int?,
43+
orderRequest: String?,
44+
asc: Boolean?): MutableList<<%-table.modelName%>> {
45+
//TODO: review generated method
46+
val orderRequestAndColumn = HashMap<String, String>()
47+
48+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
49+
orderRequestAndColumn.put("<%-column.name%>", "<%-table.name%>.<%-column.name%>")
50+
<%_ } _%>
51+
52+
val orderColumn = orderRequestAndColumn[orderRequest]
53+
54+
val params = ArrayList<Any>()
55+
<%_ if (table.isRemovable) _%>
56+
var where = "WHERE <%-table.removableColumn.name%> = 1 "
57+
<%_ } else { _%>
58+
var where = "WHERE 1 = 1 "
59+
<%_ } _%>
60+
61+
if (!Strings.isNullOrEmpty(query)) {
62+
where += ("""
63+
AND LOWER(CONCAT(
64+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
65+
IFNULL(<%-table.name%>.<%-column.name%>, '')<%-i < table.columns.length - 1 ? ',' : ''%>
66+
<%_ } _%>
67+
)) LIKE LOWER(?)
68+
""")
69+
params.add("%$query%")
70+
}
71+
72+
var limitQuery = ""
73+
if (page != null && limit != null) {
74+
limitQuery = "LIMIT ?, ? "
75+
params.add(page * limit)
76+
params.add(limit)
77+
}
78+
79+
return selectList("""
80+
SELECT *
81+
FROM <%-table.name%>
82+
$where
83+
${(if (orderColumn != null && asc != null) "ORDER BY " + orderColumn + " " + (if (asc) "ASC " else "DESC ") else "")}
84+
$limitQuery
85+
""", { rs -> <%-table.modelName%>.buildAll(rs) }, *params.toTypedArray())
86+
}
87+
88+
fun count(): Int? {
89+
//TODO: review generated method
90+
return selectFirstInt("""
91+
SELECT COUNT(<%-table.columnId.name%>)
92+
FROM <%-table.name%>
93+
<%_ if (table.isRemovable) { _%>
94+
WHERE <%-table.removableColumn.name%> = 1
95+
<%_ } _%>
96+
""")
97+
}
98+
99+
fun count(search: String?): Int? {
100+
//TODO: review generated method
101+
return selectFirstInt("""
102+
SELECT COUNT(<%-table.columnId.name%>)
103+
FROM <%-table.name%>
104+
WHERE LOWER(CONCAT(
105+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
106+
IFNULL(<%-table.name%>.<%-column.name%>, '')<%-i < table.columns.length - 1 ? ',' : ''%>
107+
<%_ } _%>
108+
)) LIKE LOWER(?)
109+
""",
110+
"%$search%")
111+
}
112+
113+
fun update<%-table.modelName%>(<%-table.instanceName%>: <%-table.modelName%>): Int {
114+
//TODO: review generated method
115+
return update("""
116+
UPDATE <%-table.name%>
117+
SET
118+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
119+
<%_ if (column.isPassword) { _%>
120+
<%-column.name%> = IF(? IS NOT NULL, SHA2(?, 256), <%-column.name%>)<%-i < table.columns.length - 1 ? ',' : ''%>
121+
<%_ } else if (column.isUpdatedAt) { _%>
122+
<%-column.name%> = NOW()<%-i < table.columns.length - 1 ? ',' : ''%>
123+
<%_ } else { _%>
124+
<%-column.name%> = ?<%-i < table.columns.length - 1 ? ',' : ''%>
125+
<%_ } _%>
126+
<%_ } _%>
127+
WHERE 1 = 1
128+
<%-table.primariesByWhere()%>
129+
""",
130+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
131+
<%_ if (column.isPassword) { _%>
132+
<%-table.instanceName%>.<%-column.name%>, <%-table.instanceName%>.<%-column.name%>,
133+
<%_ } else if (column.isUpdatedAt) { _%>
134+
<%_ } else { _%>
135+
<%-table.instanceName%>.<%-column.name%>,
136+
<%_ } _%>
137+
<%_ } _%>
138+
<%-table.primariesByComma(false)%>).affectedRows
139+
}
140+
141+
fun insert(<%-table.instanceName%>: <%-table.modelName%>): Long {
142+
//TODO: review generated method
143+
return update("""
144+
INSERT INTO <%-table.name%> (
145+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
146+
<%-column.name%><%-i < table.columns.length - 1 ? ',' : ''%>
147+
<%_ } _%>
148+
) VALUES (
149+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
150+
<%_ if (column.isPassword) { _%>
151+
<%= 'SHA2(?, 256)' + (i < table.columns.length - 1 ? ',' : '') =%>
152+
<%_ } else if (column.isCreatedAt) { _%>
153+
<%= 'NOW()' + (i < table.columns.length - 1 ? ',' : '') =%>
154+
<%_ } else { _%>
155+
<%= '?' + (i < table.columns.length - 1 ? ',' : '') =%>
156+
<%_ } _%>
157+
<%_ } _%>
158+
)
159+
""",
160+
<%_ for (var i in table.columns) { var column = table.columns[i] _%>
161+
<%_ if (column.isCreatedAt) { _%>
162+
<%_ } else { _%>
163+
<%-table.instanceName%>.<%-column.name%><%-i < table.columns.length - 1 ? ',' : ''%>
164+
<%_ } _%>
165+
<%_ } _%>).key
166+
}
167+
168+
<%_ if (table.hasUnique) { _%>
169+
fun existUnico(<%-table.uniqueColumn.name%>: <%-table.uniqueColumn.kotlinType%>?, <%-table.primariesByComma(true)%>): Boolean {
170+
//TODO: review generated method
171+
return exist("""
172+
SELECT <%-table.uniqueColumn.name%>
173+
FROM <%-table.name%>
174+
WHERE <%-table.uniqueColumn.name%> = ?
175+
<%-table.primariesByWhere(true)%>
176+
""", <%-table.uniqueColumn.name%>, <%-table.primariesByComma(false)%>)
177+
}
178+
<%_ } _%>
179+
180+
<%_ if (table.isRemovable) { _%>
181+
fun softDelete(<%-table.primariesByComma(true)%>): Int {
182+
//TODO: review generated method
183+
return update("""
184+
UPDATE <%-table.name%>
185+
SET <%-table.removableColumn.name%> = 0
186+
WHERE 1 = 1
187+
<%-table.primariesByWhere()%>
188+
""", <%-table.primariesByComma(false)%>).affectedRows
189+
}
190+
<%_ } _%>
191+
}

packages/@simpli/cli-server/generator/template/src/main/java/br/com/martinlabs/usecase/exception/HttpException.kt renamed to packages/@simpli/cli-server/generator/injected/src/main/exception/HttpException.kt

File renamed without changes.

packages/@simpli/cli-server/generator/template/src/main/java/br/com/martinlabs/usecase/model/Principal.kt renamed to packages/@simpli/cli-server/generator/injected/src/main/model/Template.kt

File renamed without changes.

0 commit comments

Comments
 (0)