diff --git a/src/main/java/de/jottyfan/timetrack/spring/done/module/IModuleService.java b/src/main/java/de/jottyfan/timetrack/spring/done/module/IModuleService.java new file mode 100644 index 0000000..10c5763 --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/spring/done/module/IModuleService.java @@ -0,0 +1,14 @@ +package de.jottyfan.timetrack.spring.done.module; + +import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord; + +/** + * + * @author henkej + * + */ +public interface IModuleService { + public TModuleRecord getModule(Integer id); + public Integer doUpsertModule(TModuleRecord bean); + public Integer doDeleteModule(Integer id); +} diff --git a/src/main/java/de/jottyfan/timetrack/spring/done/module/ModuleController.java b/src/main/java/de/jottyfan/timetrack/spring/done/module/ModuleController.java new file mode 100644 index 0000000..30bb5fc --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/spring/done/module/ModuleController.java @@ -0,0 +1,62 @@ +package de.jottyfan.timetrack.spring.done.module; + +import javax.annotation.security.RolesAllowed; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord; +import de.jottyfan.timetrack.spring.done.DoneController; +import de.jottyfan.timetrack.spring.done.DoneModel; + +/** + * + * @author henkej + * + */ +@Controller +public class ModuleController { + private static final Logger LOGGER = LogManager.getLogger(ModuleController.class); + + @Autowired + private IModuleService moduleService; + + @Autowired + private DoneController doneController; + + @RolesAllowed("timetrack_user") + @GetMapping("/done/edit/module/{id}") + public String toModule(@PathVariable Integer id, Model model) { + TModuleRecord module = moduleService.getModule(id); + model.addAttribute("moduleBean", module); + return "done/module"; + } + + @RolesAllowed("timetrack_user") + @RequestMapping(value = "/done/upsert/module", method = RequestMethod.POST) + public String doUpsert(Model model, @ModelAttribute TModuleRecord bean) { + Integer amount = moduleService.doUpsertModule(bean); + return amount.equals(1) ? doneController.getList(new DoneModel(), model) : toModule(bean.getPk(), model); + } + + @RolesAllowed("timetrack_user") + @RequestMapping(value = "/done/add/module", method = RequestMethod.GET) + public String toAddModule(Model model) { + return toModule(null, model); + } + + @RolesAllowed("timetrack_user") + @GetMapping(value = "/done/delete/module/{id}") + public String doDeleteModule(@PathVariable Integer id, Model model) { + Integer amount = moduleService.doDeleteModule(id); + return amount.equals(1) ? doneController.getList(new DoneModel(), model) : toModule(id, model); + } +} diff --git a/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleGateway.java b/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleGateway.java new file mode 100644 index 0000000..4044e70 --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleGateway.java @@ -0,0 +1,78 @@ +package de.jottyfan.timetrack.spring.done.module.impl; + +import static de.jottyfan.timetrack.db.done.Tables.T_MODULE; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jooq.DSLContext; +import org.jooq.DeleteConditionStep; +import org.jooq.InsertReturningStep; +import org.jooq.SelectConditionStep; +import org.jooq.UpdateConditionStep; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord; + +/** + * + * @author jotty + * + */ +@Repository +public class ModuleGateway { + private static final Logger LOGGER = LogManager.getLogger(ModuleGateway.class); + private final DSLContext jooq; + + public ModuleGateway(@Autowired DSLContext jooq) throws Exception { + this.jooq = jooq; + } + + public DSLContext getJooq() { + return this.jooq; + } + + public TModuleRecord getModule(Integer id) { + SelectConditionStep sql = getJooq().selectFrom(T_MODULE).where(T_MODULE.PK.eq(id)); + LOGGER.debug(sql.toString()); + return sql.fetchOne(); + } + + public Integer upsert(TModuleRecord bean) { + return bean.getPk() != null ? update(bean) : insert(bean); + } + + private Integer insert(TModuleRecord bean) { + InsertReturningStep sql = getJooq() + // @formatter:off + .insertInto(T_MODULE, + T_MODULE.NAME) + .values(bean.getName()) + .onConflict(T_MODULE.NAME) + .doNothing(); + // @formatter:on + LOGGER.debug(sql.toString()); + return sql.execute(); + } + + private Integer update(TModuleRecord bean) { + UpdateConditionStep sql = getJooq() + // @formatter:off + .update(T_MODULE) + .set(T_MODULE.NAME, bean.getName()) + .where(T_MODULE.PK.eq(bean.getPk())); + // @formatter:on + LOGGER.debug(sql.toString()); + return sql.execute(); + } + + public Integer delete(Integer id) { + DeleteConditionStep sql = getJooq() + // @formatter:off + .deleteFrom(T_MODULE) + .where(T_MODULE.PK.eq(id)); + // @formatter:on + LOGGER.debug(sql.toString()); + return sql.execute(); + } +} diff --git a/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleService.java b/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleService.java new file mode 100644 index 0000000..c9e1da9 --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/spring/done/module/impl/ModuleService.java @@ -0,0 +1,53 @@ +package de.jottyfan.timetrack.spring.done.module.impl; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jooq.DSLContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord; +import de.jottyfan.timetrack.db.done.tables.records.TProjectRecord; +import de.jottyfan.timetrack.spring.done.module.IModuleService; +import de.jottyfan.timetrack.spring.done.project.IProjectService; + +@Service +@Transactional(transactionManager = "transactionManager") +public class ModuleService implements IModuleService { + private static final Logger LOGGER = LogManager.getLogger(ModuleService.class); + + @Autowired + private DSLContext dsl; + + + @Override + public TModuleRecord getModule(Integer id) { + try { + return id == null ? new TModuleRecord() : new ModuleGateway(dsl).getModule(id); + } catch (Exception e) { + LOGGER.error(e); + return null; + } + } + + @Override + public Integer doUpsertModule(TModuleRecord bean) { + try { + return new ModuleGateway(dsl).upsert(bean); + } catch (Exception e) { + LOGGER.error(e); + return -1; + } + } + + @Override + public Integer doDeleteModule(Integer id) { + try { + return new ModuleGateway(dsl).delete(id); + } catch (Exception e) { + LOGGER.error(e); + return -1; + } + } +} diff --git a/src/main/resources/templates/done/list.html b/src/main/resources/templates/done/list.html index 4f6a7ba..12e0a3d 100644 --- a/src/main/resources/templates/done/list.html +++ b/src/main/resources/templates/done/list.html @@ -106,14 +106,23 @@ Name Benutzt in % + + + + + + neues Modul + + +
diff --git a/src/main/resources/templates/done/module.html b/src/main/resources/templates/done/module.html new file mode 100644 index 0000000..1cb8b42 --- /dev/null +++ b/src/main/resources/templates/done/module.html @@ -0,0 +1,42 @@ + + + +Modul aktualisieren + + +
    +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
Änderung
+
+ + abbrechen + +
+
+
+
+
+ + \ No newline at end of file