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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public interface CodegenConfig {

String apiFileFolder();

String repoFileFolder();

String apiTestFileFolder();

String apiDocFileFolder();
Expand All @@ -49,6 +51,8 @@ public interface CodegenConfig {

String modelPackage();

String repoPackage();

String toApiName(String name);

String toApiVarName(String name);
Expand Down Expand Up @@ -107,6 +111,8 @@ public interface CodegenConfig {

Map<String, String> apiTemplateFiles();

Map<String, String> repoTemplateFiles();

Map<String, String> modelTemplateFiles();

Map<String, String> apiTestTemplateFiles();
Expand Down Expand Up @@ -159,6 +165,8 @@ public interface CodegenConfig {

String apiFilename(String templateName, String tag);

String repoFilename(String templateName, String tag);

String apiTestFilename(String templateName, String tag);

String apiDocFilename(String templateName, String tag);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,10 @@ public class DefaultCodegen {
protected String modelPackage = "", apiPackage = "", fileSuffix;
protected String modelNamePrefix = "", modelNameSuffix = "";
protected String testPackage = "";
protected String repoPackage = "";
protected Map<String, String> apiTemplateFiles = new HashMap<String, String>();
protected Map<String, String> modelTemplateFiles = new HashMap<String, String>();
protected Map<String, String> repoTemplateFiles = new HashMap<>();
protected Map<String, String> apiTestTemplateFiles = new HashMap<String, String>();
protected Map<String, String> modelTestTemplateFiles = new HashMap<String, String>();
protected Map<String, String> apiDocTemplateFiles = new HashMap<String, String>();
Expand Down Expand Up @@ -414,6 +416,10 @@ public String apiPackage() {
return apiPackage;
}

public String repoPackage() {
return repoPackage;
}

public String fileSuffix() {
return fileSuffix;
}
Expand Down Expand Up @@ -458,6 +464,10 @@ public Map<String, String> apiTemplateFiles() {
return apiTemplateFiles;
}

public Map<String, String> repoTemplateFiles() {
return repoTemplateFiles;
}

public Map<String, String> modelTemplateFiles() {
return modelTemplateFiles;
}
Expand All @@ -466,6 +476,10 @@ public String apiFileFolder() {
return outputFolder + "/" + apiPackage().replace('.', '/');
}

public String repoFileFolder() {
return outputFolder + "/" + repoPackage().replace('.', '/');
}

public String modelFileFolder() {
return outputFolder + "/" + modelPackage().replace('.', '/');
}
Expand Down Expand Up @@ -566,6 +580,10 @@ public String toApiFilename(String name) {
return toApiName(name);
}

public String toRepoFilename(String name) {
return toRepoName(name);
}

/**
* Return the file name of the Api Documentation
*
Expand Down Expand Up @@ -1131,6 +1149,16 @@ public String initialCaps(String name) {
return StringUtils.capitalize(name);
}

/**
* Makes the string lower case
*
* @param s string to be lowered
* @return lowered string
*/
public String toLowerCase(String s) {
return StringUtils.lowerCase(s);
}

/**
* Output the type declaration of a given name
*
Expand Down Expand Up @@ -1170,6 +1198,20 @@ public String toApiName(String name) {
return initialCaps(name) + "Api";
}

/**
* Output the repository name (snake-case)
* Return 'default' when name is empty
*
* @param name the name of repository
* @return snaked name
*/
public String toRepoName(String name) {
if (name.length() == 0) {
return "DefaultRepository";
}
return initialCaps(name) + "Repository";
}

/**
* Output the proper model name (capitalized)
*
Expand Down Expand Up @@ -2959,6 +3001,11 @@ public String apiFilename(String templateName, String tag) {
return apiFileFolder() + '/' + toApiFilename(tag) + suffix;
}

public String repoFilename(String templateName, String tag) {
String suffix = repoTemplateFiles().get(templateName);
return repoFileFolder() + '/' + toRepoFilename(tag) + suffix;
}

/**
* Return the full path and API documentation file
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,19 @@ public int compare(CodegenOperation one, CodegenOperation another) {
}
}

for (String templateName : config.repoTemplateFiles().keySet()) {
String filename = config.repoFilename(templateName, tag);
if (!config.shouldOverwrite(filename) && new File(filename).exists()) {
LOGGER.info("Skipped overwriting " + filename);
continue;
}

File written = processTemplateToFile(operation, templateName, filename);
if(written != null) {
files.add(written);
}
}

if(generateApiTests) {
// to generate api test files
for (String templateName : config.apiTestTemplateFiles().keySet()) {
Expand Down Expand Up @@ -490,6 +503,7 @@ public int compare(CodegenOperation one, CodegenOperation another) {
Map<String, Object> bundle = new HashMap<String, Object>();
bundle.putAll(config.additionalProperties());
bundle.put("apiPackage", config.apiPackage());
bundle.put("repoPackage", config.repoPackage());

Map<String, Object> apis = new HashMap<String, Object>();
apis.put("apis", allOperations);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public MercuriusGoServerCodegen() {
* class
*/
apiTemplateFiles.put("handler/handler.mustache", ".go");
repoTemplateFiles.put("repository/repository.mustache", ".go");

/*
* Template Location. This is the location which templates will be read from. The generator
Expand Down Expand Up @@ -143,9 +144,6 @@ public MercuriusGoServerCodegen() {
supportingFiles.add(new SupportingFile("public/static", "public", "static"));
supportingFiles.add(new SupportingFile("public/templates/jade", "public/templates", "jade"));

// repository files
supportingFiles.add(new SupportingFile("repository/repository", "repository", "repository"));

// lib files
supportingFiles.add(new SupportingFile("lib/auth/token.mustache", "lib/auth", "token.go"));
supportingFiles.add(new SupportingFile("lib/auth/verifier.mustache", "lib/auth", "verifier.go"));
Expand Down Expand Up @@ -227,13 +225,26 @@ public String modelFileFolder() {
return outputFolder + File.separator + "model";
}

@Override
public String repoFileFolder() {
return outputFolder + File.separator + "repository";
}

@Override
public String toModelName(String name) {
// camelize the model name
// phone_number => PhoneNumber
return camelize(toModelFilename(name));
}

@Override
public String toRepoName(String name) {
if (name.length() == 0) {
return "default";
}
return snakeCase(name);
}

@Override
public String toOperationId(String operationId) {
// method name cannot use reserved keyword, e.g. return
Expand Down Expand Up @@ -275,6 +286,15 @@ public String toApiFilename(String name) {
return underscore(name);
}

@Override
public String toRepoFilename(String name) {
// replace - with _ e.g. created-at => created_at
name = name.replaceAll("-", "_");

// e.g. PetApi.go => pet_api.go
return underscore(name);
}

@Override
public String escapeQuotationMark(String input) {
// remove " to avoid code injection
Expand All @@ -294,7 +314,8 @@ public String toVarName(String name) {
@Override
public void processSwagger(Swagger swagger) {
// rewrite handlers file
rewriteHandlersFile(swagger);
rewriteFiles(swagger, "handler");
rewriteFiles(swagger, "repository");
rewriteRoutes();
super.processSwagger(swagger);
}
Expand Down Expand Up @@ -326,19 +347,36 @@ private void rewriteRoutes() {
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
if (bw != null)bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
closeBuffRW(bw, br);
}
}

private void closeBuffRW(BufferedWriter bw, BufferedReader br) {
try {
if (br != null)br.close();
if (bw != null)bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

private void rewriteHandlersFile(Swagger swagger) {
private void rewriteFiles(Swagger swagger, String folder) {
String url = swagger.getExternalDocs().getUrl();
url = url + "/lib/context";
File dir = new File(outputFolder + "/handler");

StringBuilder sb = new StringBuilder();
sb.append("/");
sb.append(folder);

folder = sb.toString();

File dir = new File(outputFolder + folder);

if (dir.listFiles() == null) {
LOGGER.debug("No files to rewrite");
return;
}

for (File handler : dir.listFiles()) {
BufferedReader br = null;
BufferedWriter bw = null;
Expand All @@ -347,7 +385,7 @@ private void rewriteHandlersFile(Swagger swagger) {
String sCurrentLine;

br = new BufferedReader(new FileReader(handler));
File file = new File(outputFolder + "/handler/" + handler.getName() + ".generated");
File file = new File(outputFolder + folder + "/" + handler.getName() + ".generated");
bw = new BufferedWriter(new FileWriter(file));
boolean changeTime = false;
while ((sCurrentLine = br.readLine()) != null) {
Expand All @@ -366,12 +404,7 @@ private void rewriteHandlersFile(Swagger swagger) {
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
if (bw != null)bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
closeBuffRW(bw, br);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package repository

import (
"{{importPath}}/lib/context"
)

type {{classname}}Repo struct {
{{classname}}List []model.{{classname}}
datasetSize int
}

func New{{classname}}Repository() *{{classname}}Repo {
return &{{classname}}Repo {
{{classname}}List: make([]model.{{classname}}, 0),
datasetSize: 30,
}
}

{{#operations}}
{{#operation}}
func (r *{{classname}}Repo) {{nickname}}() {

}
{{/operation}}
{{/operations}}