Code Monkey home page Code Monkey logo

cngalwebsite's Introduction

CnGal资料站

愿每一个CnGal创作者的作品都能不被忘记

LICENSE standard-repository stars 爱发电

国际化

简体中文 | English

内容目录

点我 打开/关闭 目录列表

项目介绍

这里是CnGal资料站第二次改版后的完整网站项目

CnGal是一个非营利性的,立志于收集整理国内制作组创作及中文化的中文Galgame/AVG的介绍、攻略、评测、感想等内容的资料性质的网站。 此外,CnGal官方还会与圈内中文AVG制作组进行友好合作,如免费提供Banner广告位,网站服务器资源等。

官方网站

主站:https://www.cngal.org/

PWA应用:https://app.cngal.org/

背景

时间轴

2020年6月6日 - 《CnGal制作组大全V0.1》发布,收录了我们在微博上关注的制作组

2020年11月13日 - 开启资料站补全计划,针对角色、游戏周边、相关文章、STAFF情报制作专门表格,为主站改版做准备

2020年12月23日 - 已对130+款作品情报进行重新整理,占已知CnGal游戏总数过1/3

2021年1月29日 - 公开《CnGal资料表》原始表格,收录210+款作品

2021年8月19日 - CnGal资料站 v3.0 开始内测

2021年9月21日 - 公测开始

初心

『为了让每一个创作者的作品都能不被忘记』

我们开始了为期一年的资料补全
升级站点,让游戏更便于录入
与互联网档案馆对接,让数据永存

『为了让每一个普通的玩家都能参与』

我们采用了类Wiki的形式,让每一个玩家都参与编辑
对外开放API,采用知识共享署名

图形演示

主页

功能特色

  • 词条
    • 包括二级分类:游戏、制作组、角色、STAFF
    • 拥有主页,相册,标签等模块
    • 游戏包括STAFF、制作组、发行商
    • 游戏会展示Steam贩售价格
    • 角色可以录入身高,性格,瞳色等详细数据
    • 以卡片形式展示关联信息
    • 任何人都可编辑,查看历史编辑数据
    • 允许用户留言
  • 文章
    • 包括二级分类:攻略、 访谈、感想......
    • 允许用户点赞、评论
    • 任何人都能发布文章,但只有自己能够编辑
  • 周边
    • 包括详尽的信息字段:价格,分类,尺寸......
    • 允许关联其他周边,以套装形式展示
    • 会以合集方式展示在相关词条下方
    • 可以记录用户的收集进度
    • 允许用户评论
  • 标签
    • 拥有层级关系
  • 消歧义页
    • 可以对相似文章、词条消歧义
  • 用户
    • 完整的账户管理
    • 允许创建收藏夹,并收藏词条、文章、周边
    • 查看编辑历史
    • 记录积分和贡献值
    • 接收系统消息
    • 允许其他用户在空间留言
    • 绑定第三方账户
  • 后台
    • 完善的各模块数据管理页面
    • 批量导入数据
    • 拥有临时脚本执行入口
    • 允许执行定时任务
    • 自动备份页面到互联网档案馆
    • 用户权限管理
  • 其他
    • 数据汇总页面
    • 编辑指引与词条完善度检查
    • 动态汇总页面

架构

后端:ASP .Net Core Web API

前端:ASP .Net Core Blazor

UI库:BlazorBootstrap

数据库:Mysql 8.0

ORM:Entity Framework Core 6.0

SDK:.Net 6.0

|—— .git                              Git 配置文件
|—— CnGalWebSite                      项目代码
| |—— CnGalWebSite.APIServer          API项目
| | |—— Application                     公共方法
| | |—— Controllers                     控制器
| | |—— CustomMiddlewares               中间件
| | |—— DataReositories                 数据库基础设施
| | |—— Infrastructure                  接口
| | |—— Migrations                      数据库迁移文件
| |—— CnGalWebSite.Server             服务端渲染项目
| |—— CnGalWebSite.WebAssembly        客户端渲染项目
| |—— CnGalWebSite.DataModel          数据模型类库
| |—— CnGalWebSite.Shared             Blazor页面组件类库
|—— CHANGELOG.md                    发布日志
|—— LICENSE                         许可证
|—— README.md                       中文 README
|—— README.en-US.md                 英语 README

新手入门

如果你想要开发第三方客户端,请参阅 API使用流程

点我 查看如何搭建运行环境并运行项目

在参与项目之前,可以查看 代码文档 了解代码结构,并阅读我们的 代码规范

维护者

感谢这些项目的维护者:

沙雕の方块

点我 打开/关闭 维护者列表
  • 沙雕の方块 - 项目开发者,大二,努力成为全栈工程师中

贡献者

感谢所有参与 CnGal资料站 开发的贡献者。贡献者列表

社区交流

CnGal玩家交流群:128446539

CnGal资料站编辑者交流&Bug反馈群:761794704

新浪微博:CnGal

部分用户

CnGal资料站:https://www.cngal.org/

捐赠者

感谢这些项目的捐赠者:

NTR天下第一 雷之 Zero就是零啊 mzy069 Emiya 被炒的炒饭 无名剑侠 mem.wey 声控灯 隐_hermity 陈炎西 小恸恸 毕业后咖啡时间 SKT STUDIO 巴格拉季昂亲王 莫言国G 慕寒幻夜 SP-time制作组 星辰 CnG天下第一 墨小菊天下第一 十六夜

点我 打开/关闭 捐赠者列表

特别感谢

感谢不愿透露姓名的热心人士提供词库

感谢 KSE Hiyo 为资料站制作宣传PV

KSEHiyo

感谢参与编辑《CnGal制作组大全V0.1》的胖胖、小恸恸、HAna

胖胖 小恸恸 HAna花火

感谢半年以来参与资料站补全计划,一同编辑资料表和提供参考资料的小伙伴们:

九州人士 Sliots 亲王 声控灯 隐 捡垃圾的垃圾佬 CriAngel 沙雕の方块 昊晨 我不姓高abc 百变一点也不怪 柳知萧 磁爆步兵杨永信 月骨琉璃 zhl 原味葱油饼干 Chr_ Pink Paul 快乐的老鼠宝宝 七海无涯 深盾亲王欧根 Grayson Kun 祢梨 ええと 绫光

九州人士,Sliots,亲王,声控灯,隐,捡垃圾的垃圾佬,CriAngel,沙雕の方块,昊晨,我不姓高abc,百变一点也不怪,柳知萧,磁爆步兵杨永信,月骨✾ۖ͡琉璃ೄ೨,zhl,原味葱油饼干,Chr_,Pink Paul,快乐的老鼠宝宝,七海无涯,深盾亲王欧根,Grayson Kun,祢梨,ええと,绫光

版权许可

License MIT

cngalwebsite's People

Contributors

cngal avatar littlefish-233 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cngalwebsite's Issues

使用MASA Blazor重置全部UI

剩余需要重置的页面/控件

  • 后台管理
  • 收藏夹编辑页面
  • 移动端主页
  • 个人资料修改页面
  • 登入相关页面
  • 表格组件
  • 输入框组件
  • 通知
  • 图表

需求:添加对基于标识符的知识图谱索引支持

你的功能是为了解决一个现有问题吗?
是的,目前每次填写标识符都非常麻烦
(别看Issue名字这么夸张,其实说白了就是打ID打累了)
(感觉这个Issue只能解决我一个人的需求?毕竟我目前没看到有其他知识图谱爱好者(逃))

描述你想要的解决方式
能够快速检索常见的标识符系统,快速填写Key本身

描述你考虑过的解决方案
这个要看程序大佬怎么实现了
比如他们可以直接快速选择是哪一家的标识符,并且能把存量的转化出来

其他内容

  • CNGAL上
    现在每次添加标识符都得手工打一个完整的链接,并且需要保证大小写完全不会出错
    图片
    并且标识符应该一般是不需要手动再输入一串描述文本的吧?
    图片
    然后才能看到效果,审核会不会也很费力?
    图片

  • VNDB上
    而VNDB的编辑界面虽然不智能,但是它也只需要我把核心内容填进去就好
    图片

  • Wikidata上
    而Wikidata的编辑器是具有联想功能的,它显然是针对标识符做过针对性的优化,常见的各大索引都有对应的Property
    图片

请求规范日志输出

目前整个项目没有规范的后台日志输出,极度依赖于本地实时调试
已经出现过几次仅在生产环境中出现的Bug,应尽快补全日志输出

缺陷:没有检查名称前后空格

编辑词条各个信息时有可能前后不小心多录入了空格,导致错误关联或重复创建对象

应该对所有输入检查并剔除前后空格或者其他特殊字符

缺陷:站内消息发送及展示代码逻辑混乱

目前站内消息仅用于通知编辑结果和回复,可以优化发送逻辑
但是,消息发送代码大量耦合在其他业务逻辑里,大量的复制粘贴造成逻辑极其混乱,无法继续维护
需要重构

建议:希望能够将各个市场平等看待作为商店信息

例如我们以一款有Taptap和Steam同时发行的游戏为例
图片

这一个板块的题目直接叫Steam信息,而Taptap则被放在了下面的相关网站上。

又或者是同时在NS上也有销售的WILL美好世界:

图片

它在NS,Taptap两套商店/应用市场里面均有提供,是可以直接搞到对应的索引的。

能否对于Steam应用、Taptap应用等,都采取和之前#93 中提到的索引支持一样,大量的索引化填写,减少复制URL的麻烦?

当然这估计又得意味着后端的一堆大改了(挠头)

好处是可以直接用爬虫从Wikidata上面爬取对应的标识符进来。

比如Steam应用对应的是P1733,Taptap对应的是P9297,NS的eShop对应的是P8084

Apple Store和GPlay的我还没找,不好找了应该。


F12简单改了一个效果出来,差不多是这意思?

图片

需求:对网盘类下载提供结构化支持而非一长串提取码链接

你的功能是为了解决一个现有问题吗?
是的,经常有一些小作品采用网盘分享作为外部链接,而他们的提取码和链接可能是混杂在一起的

图片

描述你想要的解决方式
类似现有的结构化方式(#93 ),允许指定网盘厂商(百度、阿里)和链接部分自动识别(#122 ),结构化提取码(甚至可以尝试自动组装,百度的链接是可以把提取码作为参数在URL里面传递的)

其他内容
可能没多少需求,建议不用排期很靠前,排future就行了,只是看到了就提一句罢了,万一哪一年开发人员闲了再写就是。

不过至少先给百度盘之类的加个LOGO吧233(也不急)

问题:为何获取所有Entries需要管理员权限

以获取条目信息为例:(接续之前QQ群的讨论)

protected override async Task OnInitializedAsync()
{
try
{
InforModel = await Http.GetFromJsonAsync<ListEntriesInforViewModel>(ToolHelper.WebApiPath + "api/admin/listentries");
}
catch (Exception ex)
{
ErrorHandler.ProcessError(ex, "无法获取词条数据");
}
}

该段代码在Swagger上对应的API为:

图片

对于数据终端用户,在Swagger上只能找到获取单个游戏条目的API,需要带参数{id}

图片

要获取所有数据,只能从 app.cngal.org/data 人工导出数据,但这里导出确实只有metadata,各种关联数据都不包含

图片

图片

图片


此外,贵站的swagger实在太慢,不管火狐还是谷歌都一样。当然我知道这是上游问题(caspar-chen/swagger-ui-layer#33 ),但是这个不吐槽觉得实在对不住点开一个折叠菜单的焦躁

希望添加草稿箱

希望能够保存未完成的编辑到草稿箱,方便下次继续编辑。
尝试实现过简单的草稿箱,但是读取数据时Markdown编辑器会报错,目前没想到怎么解决

需求:合并投稿工具到主站中

目前投稿工具采用控制台的方式,对普通用户极度不友好;采用独立部署的方式,极大地增加了时间成本。
合并到主站之后,可以方便地集成实时可视化提示,利用MAUI也可以方便地部署客户端版本

需求:希望消息通知展示来源信息

目前没法方便地在消息通知页跳转到来源,希望能规范各个消息通知的格式,动态聚合数据展示
PS. 顺手把无法回复的bug修了
PS. 最古老的还没重构过的模块,现在动起手来绝对会很费劲吧

需求:提前检查并展示编辑可能会造成的副作用

目前部分编辑可能会造成副作用,例如词条编辑关联信息会自动反向关联,编辑游戏SteamId会自动添加Steam主图等等;但是这些副作用对用户都是不可预知的,可能会造成用户误操作。

可以提前列出创建词条后哪些会产生哪些副作用,然后用户可以选择阻止某些副作用。

估计又是一个大工程,审核的顺序要大改

编辑标签关联信息时未去重

阅读源码后发现这部分没有去重,目前流程下没有问题
但是,如果其他部分出现问题,将会造成循环生成审核记录的bug

请求合并《CnGal资料表》处理脚本到投稿工具中

《CnGal资料表》处理脚本使用.Net Framework 4.7.2写成,依赖于Windows平台;而且处理完成后需要使用管理员后台的批量导入功能才能导入。
批量导入功能属于历史遗留,后期需要全部删除,一并迁移到投稿工具中
PS. 可能得加一个从头开始部署得数据导入引导页面

缺陷:错误地保存角色性别枚举值

正确的数据格式:
性别:None
不清楚为什么会产生的数据格式:
性别:保密

None对应的名称是保密,但是ToString方法和GetDisplayName方法获取的应该是不一样的值

    public enum GenderType
    {
        [Display(Name = "保密")]
        None,
        [Display(Name = "")]
        Man,
        [Display(Name = "")]
        Women,
        [Display(Name = "其他")]
        Other
    }

导致获取词条视图时出现以下错误

2022-06-25 04:52:52.1611|0|ERROR|Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware|An unhandled exception has occurred while executing the request. System.ArgumentException: Requested value '保密' was not found.
   at System.Enum.TryParseByName(RuntimeType enumType, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, UInt64& result)
   at System.Enum.TryParse(Type enumType, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, Object& result)
   at System.Enum.TryParse(Type enumType, String value, Boolean ignoreCase, Boolean throwOnFailure, Object& result)
   at CnGalWebSite.APIServer.Application.Entries.EntryService.GetEntryIndexViewModelAsync(Entry entry) in /src/CnGalWebSite/CnGalWebSite.APIServer/Application/Entries/EntryService.cs:line 972
   at CnGalWebSite.APIServer.Controllers.EntriesAPIController.GetEntryViewAsync(Int32 id) in /src/CnGalWebSite/CnGalWebSite.APIServer/Controllers/EntriesAPIController.cs:line 332
   at lambda_method1579(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)|url: http://www.cngal.org/api/entries/GetEntryView/4051 |action: GetEntryView |Microsoft.AspNetCore.Diagnostics.DiagnosticsLoggerExtensions.UnhandledException

但是我本地无法复现,按正常流程创建编辑词条不应该出现这个错误
离谱(×

需求:主页布局进一步适配移动端

正所谓吃饱了撑着没事干,看到Bangumi的第三方APP之后突然觉得现在这个移动端主页太挫了,应该做更多的布局适配
(这不正是去年11月干的事情么
(今年4月不是把去年干的全部推翻了吗
可谓是切身地理解了『历史是呈螺旋形向上发展的』这句话的含义

Screenshot_2022-06-21-11-43-57-043_com czy0729 ba

把侧边栏移动到底部,顶部导航栏根据不同面进行切换,词条卡片参考其样式修改

暑假或者哪天闲得慌再弄

希望添加“角色”“CV”的专题页

类似于“打折游戏”“免费游戏”的专题页面,希望添加这两个页面帮助玩家查询信息
角色目前在词条主页中有专门卡片展示,但效果并没有达到预期
CV目前没有想到该怎么做

[需求]是否会考虑支持Opensearch

你的功能是为了解决一个现有问题吗?

不是,只是为了能地址栏直达搜索更快捷

如:
图片
图片

描述你想要的解决方式

期望能提供被主流浏览器(Firefox/Chrome)识别的Opensearch文件,在地址栏右键单击可以直接添加为搜索引擎

目前是不行的:

图片
图片

描述你考虑过的解决方案
参考 https://github.com/opensearch-project/OpenSearch 提供 opensearch.xml

其他内容

暂无

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.