这个作业属于哪个课程 | 2301-计算机学院-软件工程社区-CSDN社区云 |
---|---|
这个作业要求在哪里 | 团队作业——站立式会议+alpha冲刺-CSDN社区 |
这个作业的目标 | 记录alpha冲刺Day5 |
团队名称 | 熬夜会秃头 |
团队置顶集合随笔链接 | Alpha 冲刺随笔置顶(熬夜会秃头团队)-CSDN博客 |
目录
一、团队成员站立式会议总结
组员 | 昨天站立式会议到现在的进展: | 存在的问题/遇到的困难: | 今天到明天会议的安排: | 心得体会: |
陈少桐 | 完成了查看备份文件的子窗体、优化了读写全写的判断逻辑以及新建文件的页面重新设计跟编写 | 无法用uniapp的原生导航栏产生子窗体,配置了自定义的tabbar发现跳转的时候偶尔会出现闪烁并且渲染的速度不及原生导航栏。解决:重新设计ui并编写页面跟跳转事件 | 跟后端沟通完成登录界面 | 原生的组件还是会比自定义的来的好用,有时候可能需要转换思路制作。死盯着一点点不放反而会拖慢进度让自己感觉折磨 |
梁菲汎 | 实现了前端到后端的表单通信 | 实现前端到后端表单通信过程中出现了较难解决的bug | 完善前后端交互功能 | bug总是贯穿编程始终!不过好歹搓出来了。明天继续! |
陈知菲 | 实现了删除桶、为桶配置权限的功能 | Springcloud集成Oauth2.0无法注销access_token登出 解决:尚未解决 | 接口文档编写,注册、查看用户信息等基本功能实现 | 了解了在mapper.xml文件中传入List的情况下,对List中元素进行处理的语法 |
李恒欣 | 对后端的代码进行查看修缮 | Springcloud的代码难度较大,需要不断地同学沟通以及搜索资料 | 完善后端代码功能 | 对各种注解有了更深刻的理解,使用起来更加得心应手,虽然参与的部分相对较少,但写完相应代码,看到可以运行后也是很开心的 |
邱思源 | 对已完成的后端代码进行单元测试 | 无 | 对新实现的后端代码进行单元测试 | 今天的单元测试进行地更加高效了,实现得也更好,整体上和之前相比有了很大进步 |
宋芳鑫 | 学习前端页面跳转相关知识 | 第一次接触前端跳转,学习起来较慢 | 完善前端交互功能 | 初步掌握前端页面跳转相关知识,仍需进一步进行实践巩固 |
张一凡 | 对已经开发的前端代码进行单元测试 | 对部分的前端功能实现不够清楚,和前端开发同学交流时间成本较大 | 对新实现的前端代码进行单元测试 | 对代码有正确的理解对于高效地进行单元测试有很大的帮助 |
林承桢 | 进行已完成模块的功能测试,将完成的测试结果写入测试文档 | 审查和整合前后端单元测试工作量大 | 继续进行功能测试,完善测试文档 | 今天单元测试的工作量较大,但完成整合后看到测试文档已经一点点饱满全面起来,还是很有成就感的 |
黄才栋 | 学习巩固前端vue的跨域相关知识 | vue的知识体量多,对部分的前端后端交接方法不够清楚 | 完善前端功能 | 对vue的跨域相关知识有了更好的理解和掌握,可以更好的完成后续前后端交互工作 |
谢怀广 | 核对已完成代码规范并制作项目燃尽图 | 对已完成任务与后续待完成任务量估量出现了一定偏差,已进行及时调整并绘制相应燃尽图 | 核对新增代码规范并制作项目燃尽图 | 要对整体项目的功能实现和项目进展有更深的理解,才能更好地绘制出符合当前进度的项目燃尽图 |
二、今日成果展示
为桶添加权限接口:
@PostMapping("/put_acl")
public ResponseResult putAcl(@RequestHeader Integer aclType,
@RequestHeader Integer bucketId,
@RequestParam(required = false) Integer acl,
@RequestParam(required = false) List<String> grantRead,
@RequestParam(required = false) List<String> grantWrite) {
return bucketService.putAcl(aclType, bucketId, acl, grantRead, grantWrite);
}
Service(两种权限模式,一为公共读、公共写、私有;二为创建者专门指定拥有读写权限的用户):
public ResponseResult putAcl(Integer aclType, Integer bucketId, Integer acl, List<String> grantRead, List<String> grantWrite) {
if (aclType == 1) {
bucketMapper.putAcl(bucketId, acl);
} else {
try {
bucketMapper.putAcl(bucketId, 4);
bucketMapper.deleteAdvancedAcl(bucketId,
UserContextHolder.getContext().getProperty("id").toString());
bucketMapper.putGrantRead(bucketId, grantRead);
bucketMapper.putGrantWrite(bucketId, grantWrite);
} catch (Exception e) {
return new ResponseResult(500, "有用户不存在,修改权限失败");
}
}
return new ResponseResult(200, "修改权限");
}
mapper.xml
<insert id="putGrantRead" parameterType="java.util.List">
INSERT INTO user_bucket (user_id, bucket_id, permission)
VALUES(
<foreach collection="grantRead" item="item" separator=",">
(SELECT id
FROM user
WHERE user_email = #{item}),
</foreach>
#{bucketId},0)
</insert>
<insert id="putGrantWrite" parameterType="java.util.List">
INSERT INTO user_bucket (user_id, bucket_id, permission)
VALUES(
<foreach collection="grantWrite" item="item" separator=",">
(SELECT id
FROM user
WHERE user_email = #{item}),
</foreach>
#{bucketId},1)
</insert>
删除桶接口
@PostMapping("/delete_bucket")
public ResponseResult deleteBucket(@RequestParam String bucketId,
@RequestParam(defaultValue = "0") Integer isInternal) {
return bucketService.deleteBucket(bucketId, isInternal);
}
Service(删除本地、其他节点的桶以及桶中的所有对象)
public ResponseResult deleteBucket(String bucketId, int isInternal) {
//是否创建者
if (bucketMapper.isCreator(bucketId,
UserContextHolder.getContext().getProperty("id").toString()) == 0) {
return new ResponseResult(500, "没有权限");
} else if (isInternal == 0) {
bucketMapper.deleteAdvancedAcl(Integer.parseInt(bucketId), null);
servicesUtil.getInstance("node01-service").forEach(instance -> {
try {
String uri = "http://" + instance.getHost() + ":" + instance.getPort();
testFeign.deleteBucket(new URI(uri), bucketId, 1);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
});
//删去bucket下的所有文件
FileUtil.deleteDirectory(baseUrl + bucketId);
bucketMapper.deleteBucket(bucketId);
return new ResponseResult(200, "删除桶");
}
return null;
}
mapper
<delete id="deleteBucket">
DELETE
FROM bucket
WHERE id = #{bucketId}
</delete>
递归删除文件夹下所有文件
public static void deleteDirectory(String uri) {
try {
Path path = Paths.get(uri);
if (Files.isDirectory(path)) {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
// 先去遍历删除文件
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
}
);
Files.delete(path);
}
} catch (IOException e) {
e.printStackTrace();
}
}