DefaultApiServiceProvider.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package org.ssssssss.magicapi.provider.impl;
  2. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  3. import org.springframework.jdbc.core.JdbcTemplate;
  4. import org.ssssssss.magicapi.model.ApiInfo;
  5. import org.ssssssss.magicapi.provider.ApiServiceProvider;
  6. import java.util.Arrays;
  7. import java.util.List;
  8. import java.util.UUID;
  9. import java.util.stream.Collectors;
  10. public class DefaultApiServiceProvider extends BeanPropertyRowMapper<ApiInfo> implements ApiServiceProvider {
  11. private final String COMMON_COLUMNS = "id,\n" +
  12. "api_name,\n" +
  13. "api_group_id,\n" +
  14. "api_path,\n" +
  15. "api_description,\n" +
  16. "api_method";
  17. private final String SCRIPT_COLUMNS = "api_script,\n" +
  18. "api_parameter,\n" +
  19. "api_request_header,\n" +
  20. "api_request_body,\n" +
  21. "api_response_body,\n" +
  22. "api_option\n";
  23. private JdbcTemplate template;
  24. public DefaultApiServiceProvider(JdbcTemplate template) {
  25. super(ApiInfo.class);
  26. this.template = template;
  27. }
  28. public boolean delete(String id) {
  29. String deleteById = "delete from magic_api_info where id = ?";
  30. return template.update(deleteById, id) > 0;
  31. }
  32. public List<ApiInfo> list() {
  33. String selectList = "select " + COMMON_COLUMNS + " from magic_api_info order by api_update_time desc";
  34. return template.query(selectList, this);
  35. }
  36. public List<ApiInfo> listWithScript() {
  37. String selectListWithScript = "select " + COMMON_COLUMNS + "," + SCRIPT_COLUMNS + " from magic_api_info";
  38. List<ApiInfo> infos = template.query(selectListWithScript, this);
  39. for (ApiInfo info : infos) {
  40. unwrap(info);
  41. }
  42. return infos;
  43. }
  44. public ApiInfo get(String id) {
  45. String selectOne = "select " + COMMON_COLUMNS + "," + SCRIPT_COLUMNS + " from magic_api_info where id = ?";
  46. ApiInfo info = template.queryForObject(selectOne, this, id);
  47. unwrap(info);
  48. return info;
  49. }
  50. @Override
  51. public boolean move(String id, String groupId) {
  52. return template.update("update magic_api_info SET api_group_id = ? where id = ?", groupId, id) > 0;
  53. }
  54. @Override
  55. public boolean deleteGroup(List<String> groupIds) {
  56. List<Object[]> params = groupIds.stream().map(groupId -> new Object[]{groupId}).collect(Collectors.toList());
  57. return Arrays.stream(template.batchUpdate("delete from magic_api_info where api_group_id = ?", params)).sum() >= 0;
  58. }
  59. public boolean exists(String groupId, String method, String path) {
  60. String exists = "select count(*) from magic_api_info where api_method = ? and api_path = ? and api_group_id = ?";
  61. return template.queryForObject(exists, Integer.class, method, path, groupId) > 0;
  62. }
  63. public boolean existsWithoutId(String groupId, String method, String path, String id) {
  64. String existsWithoutId = "select count(*) from magic_api_info where api_method = ? and api_path = ? and api_group_id = ? and id !=?";
  65. return template.queryForObject(existsWithoutId, Integer.class, method, path, groupId, id) > 0;
  66. }
  67. public boolean insert(ApiInfo info) {
  68. info.setId(UUID.randomUUID().toString().replace("-", ""));
  69. wrap(info);
  70. long time = System.currentTimeMillis();
  71. String insert = "insert into magic_api_info(id,api_method,api_path,api_script,api_name,api_group_id,api_parameter,api_description,api_option,api_request_header,api_request_body,api_response_body,api_create_time,api_update_time) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  72. return template.update(insert, info.getId(), info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupId(), info.getParameter(), info.getDescription(), info.getOption(), info.getRequestHeader(), info.getRequestBody(), info.getResponseBody(), time, time) > 0;
  73. }
  74. public boolean update(ApiInfo info) {
  75. wrap(info);
  76. String update = "update magic_api_info set api_method = ?,api_path = ?,api_script = ?,api_name = ?,api_group_id = ?,api_description = ?,api_parameter = ?,api_option = ?,api_request_header = ?,api_request_body = ?,api_response_body = ?,api_update_time = ? where id = ?";
  77. return template.update(update, info.getMethod(), info.getPath(), info.getScript(), info.getName(), info.getGroupId(), info.getDescription(), info.getParameter(), info.getOption(), info.getRequestHeader(), info.getRequestBody(), info.getResponseBody(), System.currentTimeMillis(), info.getId()) > 0;
  78. }
  79. @Override
  80. public void backup(String apiId) {
  81. String backupSql = "insert into magic_api_info_his select * from magic_api_info where id = ?";
  82. template.update(backupSql, apiId);
  83. }
  84. @Override
  85. public List<Long> backupList(String apiId) {
  86. return template.queryForList("select api_update_time from magic_api_info_his where id = ? order by api_update_time desc", Long.class, apiId);
  87. }
  88. @Override
  89. public ApiInfo backupInfo(String apiId, Long timestamp) {
  90. String selectOne = "select " + COMMON_COLUMNS + "," + SCRIPT_COLUMNS + " from magic_api_info_his where id = ? and api_update_time = ?";
  91. List<ApiInfo> list = template.query(selectOne, this, apiId, timestamp);
  92. if (list != null && !list.isEmpty()) {
  93. ApiInfo info = list.get(0);
  94. unwrap(info);
  95. return info;
  96. }
  97. return null;
  98. }
  99. @Override
  100. protected String lowerCaseName(String name) {
  101. return super.lowerCaseName(name).replace("api_", "");
  102. }
  103. }