package com.cyynote.controller; import cn.hutool.*; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.cyynote.dso.NoteSqlAnnotation; import com.cyynote.model.HistoryModel; import com.cyynote.model.NoteModel; import com.cyynote.payload.request.NoteRequest; import com.cyynote.util.TreeBuild; import com.cyynote.util.TreeNode; import io.jsonwebtoken.Claims; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.noear.solon.annotation.Body; import org.noear.solon.annotation.Controller; import org.noear.solon.annotation.Get; import org.noear.solon.annotation.Mapping; import org.noear.solon.annotation.Path; import org.noear.solon.annotation.Post; import org.noear.solon.annotation.Put; import org.noear.solon.core.handle.Context; import org.noear.solon.core.handle.Result; import org.noear.solon.sessionstate.jwt.JwtUtils; import org.noear.wood.DbContext; import org.noear.wood.DbTableQuery; import org.noear.wood.annotation.Db; @Mapping("/api/note") @Controller public class NoteController extends BaseController { private static final Logger log = Logger.getLogger(com.cyynote.controller.NoteController.class.getName()); @Db NoteSqlAnnotation mapper; @Db DbContext db; private static final String QUERY_F = "id,pid,title,createtime,updatetime,viewtime,flag"; @Get @Mapping("get1") public String test_post_get(Context context, @Path String appname) { return context.path(); } @Post @Mapping("post") public String test_post(Context context) { return context.param("name"); } @Put @Mapping("put") public String test_put(Context context, String name) { return context.param("name"); } @Get @Mapping("/all") public Result noteAccess(Context ctx) throws Exception { List all = ((DbTableQuery)this.db.table("note").whereEq("flag", Integer.valueOf(1))).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); List treeNodeList = new ArrayList<>(); for (NoteModel n : all) { TreeNode treeNode = new TreeNode(n.getId().intValue(), n.getPid().intValue(), n.getTitle(), String.valueOf(n.getId()), String.valueOf(n.getId())); treeNodeList.add(treeNode); } TreeBuild bb = new TreeBuild(treeNodeList); List collect = bb.buildTree(); return Result.succeed(JSONArray.parseArray(JSONArray.toJSONString(collect))); } @Get @Mapping("/home") public Result noteHome(Context ctx, @Path int type, @Path String search) throws Exception { List all = new ArrayList<>(); if (type == 0) { all = ((DbTableQuery)((DbTableQuery)this.db.table("note").whereLk("context", "%" + search + "%")).andLk("title", "%" + search + "%")).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); } else if (type == 1) { all = ((DbTableQuery)((DbTableQuery)((DbTableQuery)this.db.table("note").whereEq("flag", Integer.valueOf(1))).orderByDesc("updatetime")).limit(20)).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); } else if (type == 2) { all = ((DbTableQuery)((DbTableQuery)((DbTableQuery)this.db.table("note").whereEq("flag", Integer.valueOf(1))).orderByDesc("createtime")).limit(20)).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); } else if (type == 3) { all = ((DbTableQuery)((DbTableQuery)((DbTableQuery)this.db.table("note").whereEq("flag", Integer.valueOf(1))).orderByDesc("viewtime")).limit(20)).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); } else if (type == 4) { all = ((DbTableQuery)((DbTableQuery)((DbTableQuery)this.db.table("note").whereEq("flag", Integer.valueOf(0))).orderByDesc("updatetime")).limit(10000)).selectList("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); } return Result.succeed(JSONArray.parseArray(JSONArray.toJSONString(all))); } @Get @Mapping("/get") public Result getNote(Context ctx, @Path int id) throws Exception { NoteModel model = (NoteModel)((DbTableQuery)this.db.table("note").whereEq("id", Integer.valueOf(id))).selectItem("*", NoteModel.class); if (model == null) { ctx.status(404); return Result.failure(404, "笔记不存在"); } String time = DateUtil.now(); ((DbTableQuery)this.db.table("note").set("viewtime", time).whereEq("id", Integer.valueOf(id))).update(); model.setViewtime(time); log.info(JSONObject.toJSONString(model, new com.alibaba.fastjson2.JSONWriter.Feature[0])); return Result.succeed(model); } @Get @Mapping("/add") public Result addNote(Context ctx, @Path int pid) throws Exception { String userid = getUserInfoId(ctx); if (null == userid) return Result.failure(401); NoteModel note = new NoteModel(); note.setPid(Integer.valueOf(pid)); note.setTitle("未命名Note"); note.setFlag(Integer.valueOf(1)); note.setCreatetime(DateUtil.now()); note.setUpdatetime(note.getCreatetime()); note.setViewtime(note.getCreatetime()); note.setContext("{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"未命名Note\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}"); // note.setContext("{\"root\": {\"type\": \"root\", \"format\": \"\", \"indent\": 0, \"version\": 1, \"children\": [{\"type\": \"paragraph\", \"format\": \"\", \"indent\": 0, \"version\": 1, \"children\": [], \"direction\": null}], \"direction\": null}}"); this.db.table("note").setEntityIf(note, (k, v) -> Boolean.valueOf((v != null))).insert(); return Result.succeed("ok"); } @Post @Mapping("/update") public Result updateNote(Context ctx, @Body NoteRequest noteRequest) throws SQLException { if (noteRequest == null || noteRequest.getId() == null || noteRequest.getTitle() == null || noteRequest.getContext() == null) { ctx.status(400); return Result.failure(400, "参数不完整"); } NoteModel note = (NoteModel)((DbTableQuery)this.db.table("note").whereEq("id", noteRequest.getId())).selectItem("id,pid,title,createtime,updatetime,viewtime,flag", NoteModel.class); if (note == null) { ctx.status(404); return Result.failure(404, "笔记不存在"); } note.setTitle(noteRequest.getTitle()); note.setUpdatetime(DateUtil.now()); String cc = noteRequest.getContext(); JSONObject ar = JSONObject.parseObject(cc); note.setContext(ar.toJSONString()); int flag = ((DbTableQuery)this.db.table("note").set("title", noteRequest.getTitle()).set("updatetime", DateUtil.now()).set("context", ar.toJSONString()).whereEq("id", noteRequest.getId())).update(); log.info("updateNote+ flag"); HistoryModel history = new HistoryModel(); history.setNid(Integer.valueOf(noteRequest.getId().intValue())); history.setTitle(noteRequest.getTitle()); history.setFlag(Integer.valueOf(1)); history.setCreatetime(DateUtil.now()); history.setContext(ar.toJSONString()); long his = this.db.table("history").setEntityIf(history, (k, v) -> Boolean.valueOf((v != null))).insert(); log.info("history+ his"); return Result.succeed("ok"); } @Post @Mapping("/delete") public Result deleteNote(Context ctx, @Body NoteRequest noteRequest) throws SQLException { if (noteRequest == null || noteRequest.getId() == null) { ctx.status(400); return Result.failure(400, "笔记ID不能为空"); } int flag = ((DbTableQuery)this.db.table("note").set("flag", Integer.valueOf(0)).set("updatetime", DateUtil.now()).whereEq("id", noteRequest.getId())).update(); if (flag == 0) { ctx.status(404); return Result.failure(404, "笔记不存在"); } return Result.succeed("ok"); } @Get @Mapping("/deleteBack") public Result deleteBack(Context ctx, @Path int id) throws Exception { int flag = ((DbTableQuery)this.db.table("note").set("flag", Integer.valueOf(1)).set("updatetime", DateUtil.now()).whereEq("id", Integer.valueOf(id))).update(); if (flag == 0) { ctx.status(404); return Result.failure(404, "笔记不存在"); } return Result.succeed("ok"); } @Get @Mapping("/historyQueryOrDelete") public Result historyQueryOrDelete(@Path int flag) throws Exception { log.info("history+ flag" + flag); if(flag==0){ long count = db.table("history").selectCount(); log.info("count:" + count); return Result.succeed(count); }else if(flag==1){ int flagdb = db.table("history").whereEq("flag",1).delete(); log.info("flagdb:" + flagdb); return Result.succeed(0); } return Result.failure(400, "不支持的操作类型"); } private String getUserInfoId(Context ctx) { String userId = ""; if (null != ctx.header("Authorization")) { String token = ctx.header("Authorization"); token = token.replace("Bearer ", ""); Claims claims = JwtUtils.parseJwt(token); if (null != claims) { userId = claims.get("user_id").toString(); return userId; } return null; } return null; } }