- 
                Notifications
    
You must be signed in to change notification settings  - Fork 24
 
feat: finish task #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # 简单的代码说明 | ||
| 实现了账户的注册、登录、登出,其中在储存密码时运用了简单的哈希函数。给予了admin | ||
| 账号足够的权限。 | ||
| 实现了在登录情况下添加、删除、修改、查看自己的问题,以 | ||
| 及在所有的情况下查看所有/特定问题。在登录情况下添加、删除、修改、查看自 | ||
| 己的答案,以及在所有的情况下查看某一个问题的答案 | ||
| 一个小翻页,默认在显示一系列答案或者问题时每页20条内容 | ||
| 在github上找到了一个关于调用chatgpt的项目用于生成ai答案,但是由于 | ||
| 我没有国外的手机号,无法获得chatgpt的key,这个内容仅仅停留在未测试可行性 | ||
| * main.go是主程序 | ||
| * routes中的是操作中涉及的函数 | ||
| * mymodels中是三个实体Question、User、Answer | ||
| * myauth中是登录与登出的操作 | ||
| * db中的是连接数据库以及在数据库中自动生成实体 | ||
| * AI_answer中便是前文中提到的尚未完成的ai生成答案部分 | ||
| api文档:https://apifox.com/apidoc/shared-86117e10-c314-4e57-a13f-494295b93689 | ||
| 
     | 
||
| 
     | 
||
| 
     | 
||
| 10/5 更新,增加了调用讯飞星火的功能,把之前的chatgpt的部分去掉了,同时通过数据库储存了在线的账号,虽然我认为这 | ||
| 个功能可以通过在主程序中存一个切片就可以了。而且存在数据库里每次退出时如果没有登出操作 | ||
| 还要手动清空这个数据库。但是我认为存在库里是稳妥的,而且方便其他程序的访问,所以没有改。 | ||
| * 增加了实体 AIRequest 用来存储登录AI的必要信息 | ||
| * 修了可以给不存在的问题增加答案的bug | ||
                
       | 
||
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,41 @@ | ||||||||||||||
| module Initial_Experience | ||||||||||||||
| 
         There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Improve module name to follow Go conventions The current module name "Initial_Experience" doesn't follow Go naming conventions. In Go, it's recommended to use lowercase letters and hyphens for module names. Consider changing the module name to something like: -module Initial_Experience
+module github.com/hduhelp/backend_2024_freshman_taskThis assumes the repository is hosted on GitHub under the "hduhelp" organization. Adjust the path accordingly if it's different. 📝 Committable suggestion
 
        Suggested change
       
    
  | 
||||||||||||||
| 
     | 
||||||||||||||
| go 1.23.1 | ||||||||||||||
| 
         
      Comment on lines
    
      +1
     to 
      +3
    
   
  There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update Go version to a valid release The specified Go version  Please update the Go version to a valid, stable release. For example: -go 1.23.1
+go 1.21.5Make sure to test your code with the updated version to ensure compatibility. 📝 Committable suggestion
 
        Suggested change
       
    
  | 
||||||||||||||
| 
     | 
||||||||||||||
| require ( | ||||||||||||||
| filippo.io/edwards25519 v1.1.0 // indirect | ||||||||||||||
| github.com/bytedance/sonic v1.12.3 // indirect | ||||||||||||||
| github.com/bytedance/sonic/loader v0.2.0 // indirect | ||||||||||||||
| github.com/cloudwego/base64x v0.1.4 // indirect | ||||||||||||||
| github.com/cloudwego/iasm v0.2.0 // indirect | ||||||||||||||
| github.com/gabriel-vasile/mimetype v1.4.5 // indirect | ||||||||||||||
| github.com/gin-contrib/sse v0.1.0 // indirect | ||||||||||||||
| github.com/gin-gonic/gin v1.10.0 // indirect | ||||||||||||||
| github.com/go-playground/locales v0.14.1 // indirect | ||||||||||||||
| github.com/go-playground/universal-translator v0.18.1 // indirect | ||||||||||||||
| github.com/go-playground/validator/v10 v10.22.1 // indirect | ||||||||||||||
| github.com/go-sql-driver/mysql v1.8.1 // indirect | ||||||||||||||
| github.com/goccy/go-json v0.10.3 // indirect | ||||||||||||||
| github.com/gorilla/websocket v1.5.3 // indirect | ||||||||||||||
| github.com/jinzhu/inflection v1.0.0 // indirect | ||||||||||||||
| github.com/jinzhu/now v1.1.5 // indirect | ||||||||||||||
| github.com/json-iterator/go v1.1.12 // indirect | ||||||||||||||
| github.com/klauspost/cpuid/v2 v2.2.8 // indirect | ||||||||||||||
| github.com/leodido/go-urn v1.4.0 // indirect | ||||||||||||||
| github.com/mattn/go-isatty v0.0.20 // indirect | ||||||||||||||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||||||||||||
| github.com/modern-go/reflect2 v1.0.2 // indirect | ||||||||||||||
| github.com/pelletier/go-toml/v2 v2.2.3 // indirect | ||||||||||||||
| github.com/sashabaranov/go-openai v1.31.0 // indirect | ||||||||||||||
| github.com/twitchyliquid64/golang-asm v0.15.1 // indirect | ||||||||||||||
| github.com/ugorji/go/codec v1.2.12 // indirect | ||||||||||||||
| golang.org/x/arch v0.10.0 // indirect | ||||||||||||||
| golang.org/x/crypto v0.27.0 // indirect | ||||||||||||||
| golang.org/x/net v0.29.0 // indirect | ||||||||||||||
| golang.org/x/sys v0.25.0 // indirect | ||||||||||||||
| golang.org/x/text v0.18.0 // indirect | ||||||||||||||
| google.golang.org/protobuf v1.34.2 // indirect | ||||||||||||||
| gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||||||||||
| gorm.io/driver/mysql v1.5.7 // indirect | ||||||||||||||
| gorm.io/gorm v1.25.12 // indirect | ||||||||||||||
| ) | ||||||||||||||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= | ||
| filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= | ||
| github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= | ||
| github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= | ||
| github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= | ||
| github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= | ||
| github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= | ||
| github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= | ||
| github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= | ||
| github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= | ||
| github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= | ||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= | ||
| github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= | ||
| github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= | ||
| github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | ||
| github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= | ||
| github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= | ||
| github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= | ||
| github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= | ||
| github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= | ||
| github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= | ||
| github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= | ||
| github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= | ||
| github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= | ||
| github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= | ||
| github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= | ||
| github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= | ||
| github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= | ||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | ||
| github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= | ||
| github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||
| github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= | ||
| github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= | ||
| github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= | ||
| github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= | ||
| github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||
| github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||
| github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= | ||
| github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= | ||
| github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= | ||
| github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= | ||
| github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= | ||
| github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= | ||
| github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= | ||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= | ||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
| github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | ||
| github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||
| github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= | ||
| github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= | ||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
| github.com/sashabaranov/go-openai v1.31.0 h1:rGe77x7zUeCjtS2IS7NCY6Tp4bQviXNMhkQM6hz/UC4= | ||
| github.com/sashabaranov/go-openai v1.31.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= | ||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
| github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||
| github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||
| github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
| github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
| github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||
| github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||
| github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||
| github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= | ||
| github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= | ||
| github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= | ||
| github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= | ||
| golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= | ||
| golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= | ||
| golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= | ||
| golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= | ||
| golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= | ||
| golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= | ||
| golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||
| golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= | ||
| golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||
| golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= | ||
| golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= | ||
| google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= | ||
| google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= | ||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
| gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo= | ||
| gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM= | ||
| gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= | ||
| gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= | ||
| gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= | ||
| nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= | ||
| rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | 
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,56 @@ | ||||||||||||||||||||||||||||||||||
| package main | ||||||||||||||||||||||||||||||||||
| 
     | 
||||||||||||||||||||||||||||||||||
| import ( | ||||||||||||||||||||||||||||||||||
| "Initial_Experience/db" | ||||||||||||||||||||||||||||||||||
| "Initial_Experience/myauth" | ||||||||||||||||||||||||||||||||||
| "Initial_Experience/routes" | ||||||||||||||||||||||||||||||||||
| "github.com/gin-gonic/gin" | ||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||
| 
         
      Comment on lines
    
      +1
     to 
      +8
    
   
  There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using absolute import paths and idiomatic package naming. 
 -	"Initial_Experience/db"
-	"Initial_Experience/myauth"
-	"Initial_Experience/routes"
+	"github.com/hduhelp/backend_2024_freshman_task/db"
+	"github.com/hduhelp/backend_2024_freshman_task/myauth"
+	"github.com/hduhelp/backend_2024_freshman_task/routes"
 📝 Committable suggestion
 
        Suggested change
       
    
  | 
||||||||||||||||||||||||||||||||||
| 
     | 
||||||||||||||||||||||||||||||||||
| func main() { | ||||||||||||||||||||||||||||||||||
| r := gin.Default() | ||||||||||||||||||||||||||||||||||
| db.Connect() | ||||||||||||||||||||||||||||||||||
| db.Migrate() | ||||||||||||||||||||||||||||||||||
| 
         
      Comment on lines
    
      +10
     to 
      +13
    
   
  There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance error handling and configuration in the main function. 
 Here's a suggested improvement for the main function: func main() {
	r := gin.Default()
-	db.Connect()
-	db.Migrate()
+	if err := db.Connect(); err != nil {
+		log.Fatalf("Failed to connect to database: %v", err)
+	}
+	if err := db.Migrate(); err != nil {
+		log.Fatalf("Failed to run database migrations: %v", err)
+	}
	// ... (rest of the code)
-	r.Run(":8080")
+	port := os.Getenv("PORT")
+	if port == "" {
+		port = "8080"
+	}
+	if err := r.Run(":" + port); err != nil {
+		log.Fatalf("Failed to start server: %v", err)
+	}
}Don't forget to import the  Also applies to: 56-57  | 
||||||||||||||||||||||||||||||||||
| //用户注册 | ||||||||||||||||||||||||||||||||||
| r.POST("/register", myauth.RegisterHandler) | ||||||||||||||||||||||||||||||||||
| // 用户登录 | ||||||||||||||||||||||||||||||||||
| r.POST("/login", myauth.LoginHandler) | ||||||||||||||||||||||||||||||||||
| // 问题管理 | ||||||||||||||||||||||||||||||||||
| 
     | 
||||||||||||||||||||||||||||||||||
| //查看所有问题 | ||||||||||||||||||||||||||||||||||
| r.GET("/questions", routes.GetQuestions) | ||||||||||||||||||||||||||||||||||
| //查看某个问题 | ||||||||||||||||||||||||||||||||||
| r.GET("/questions/:question_id", routes.GetQuestionByID) | ||||||||||||||||||||||||||||||||||
| //查看某个问题的所有答案 | ||||||||||||||||||||||||||||||||||
| r.GET("/questions/:question_id/answer", routes.GetAnswerListByQuestion) | ||||||||||||||||||||||||||||||||||
| //查看某个问题的某个答案 | ||||||||||||||||||||||||||||||||||
| r.GET("/questions/answer/:answer_id", routes.GetAnswerByID) | ||||||||||||||||||||||||||||||||||
| 
         
      Comment on lines
    
      +14
     to 
      +27
    
   
  There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Public routes are unsecured and missing rate limiting. 
 Recommendations: 
 🔗 Analysis chainReview public routes for security and consider adding rate limiting. 
 import "github.com/ulule/limiter/v3"
import "github.com/ulule/limiter/v3/drivers/store/memory"
// In your main function
rate := limiter.Rate{
    Period: 1 * time.Minute,
    Limit:  100,
}
store := memory.NewStore()
middleware := limiter.NewMiddleware(limiter.New(store, rate))
// Apply to public routes
r.Use(middleware)This example limits each IP to 100 requests per minute. Adjust the rate as needed for your application. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Check if any sensitive data is exposed in public routes
rg --type go 'r\.(GET|POST)\s*\("/(questions|answers)"' main.go
Length of output: 113 Script: #!/bin/bash
# Find all main.go files in the repository
fd --extension go main.go
Length of output: 43 Script: #!/bin/bash
# Check if any sensitive data is exposed in public routes within hkr0101/main.go
rg --type go 'r\.(GET|POST)\s*\("/(questions|answers)"' hkr0101/main.go
Length of output: 115 Script: #!/bin/bash
# Find all GET and POST route definitions in the Go codebase
rg --type go 'r\.(GET|POST)\s*\("/[^"]+",\s*[^)]+\)'
Length of output: 468 Script: #!/bin/bash
# Check for authentication middleware applied to public routes in hkr0101/main.go
rg --type go 'r\.(GET|POST)\s*\("/[^"]+",\s*[^)]+\)\.Use\(' hkr0101/main.go
Length of output: 77 Script: #!/bin/bash
# Verify if rate limiting middleware is applied in hkr0101/main.go
rg --type go 'limiter\.NewMiddleware' hkr0101/main.go
Length of output: 55  | 
||||||||||||||||||||||||||||||||||
| 
     | 
||||||||||||||||||||||||||||||||||
| auth := r.Group("/:my_id") | ||||||||||||||||||||||||||||||||||
| auth.Use(myauth.AuthMiddleware()) // 使用身份验证中间件 | ||||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||||
| //创建问题 | ||||||||||||||||||||||||||||||||||
| auth.POST("/questions", routes.CreateQuestion) | ||||||||||||||||||||||||||||||||||
| //创建答案 | ||||||||||||||||||||||||||||||||||
| auth.POST("/questions/:question_id/answer", routes.CreateAnswer) | ||||||||||||||||||||||||||||||||||
| //删除问题 | ||||||||||||||||||||||||||||||||||
| auth.DELETE("/questions/:question_id", routes.DeleteQuestion) | ||||||||||||||||||||||||||||||||||
| //删除答案 | ||||||||||||||||||||||||||||||||||
| auth.DELETE("/questions/answer/:answer_id", routes.DeleteAnswer) | ||||||||||||||||||||||||||||||||||
| //更新问题 | ||||||||||||||||||||||||||||||||||
| auth.PUT("/questions/:question_id", routes.UpdateQuestion) | ||||||||||||||||||||||||||||||||||
| //更新答案 | ||||||||||||||||||||||||||||||||||
| auth.PUT("/:answer_id", routes.UpdateAnswer) | ||||||||||||||||||||||||||||||||||
| //给出当前用户的所有答案 | ||||||||||||||||||||||||||||||||||
| auth.GET("/answer", routes.GetAnswerListByUser) | ||||||||||||||||||||||||||||||||||
| //给出当前用户的所有问题 | ||||||||||||||||||||||||||||||||||
| auth.GET("/questions", routes.GetQuestionByUser) | ||||||||||||||||||||||||||||||||||
| //登出 | ||||||||||||||||||||||||||||||||||
| auth.POST("/logout", myauth.LogoutHandler) | ||||||||||||||||||||||||||||||||||
| //调用ai,未完成 | ||||||||||||||||||||||||||||||||||
| auth.POST("/chat/registerandchange", myauth.RegisterAndChangeAI) | ||||||||||||||||||||||||||||||||||
| //生成ai答案 | ||||||||||||||||||||||||||||||||||
| auth.POST("/chat/question/:question_id/answer", routes.CreateAnswerByAI) | ||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||
                
       | 
||||||||||||||||||||||||||||||||||
| r.Run(":8080") | ||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| { | ||
| "name": "application-name", | ||
| "version": "0.1.1" | ||
| } | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enhance security and clarity in the project overview
The project overview provides a good summary of the main features. However, there are a few points that could be improved:
Security concern: The use of a "simple hash function" for password storage might not be secure enough. Consider using a strong, industry-standard password hashing algorithm like bcrypt, Argon2, or PBKDF2.
Admin permissions: The description mentions that the admin account has "sufficient permissions," but it doesn't specify what these permissions are. Consider detailing the admin's capabilities for clarity.
Pagination: While pagination is mentioned, it lacks details on how it's implemented or how users can navigate through pages. Consider adding more information about this feature.
Would you like assistance in drafting a more detailed and security-focused description for these sections?