mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 04:17:23 +00:00
Compare commits
3 Commits
0c841f2723
...
481ba68d88
Author | SHA1 | Date | |
---|---|---|---|
481ba68d88 | |||
8389ab4bd7 | |||
0e69d787e3 |
@@ -95,7 +95,7 @@ function ActivityCard({ activity }: { activity: Activity }) {
|
||||
) {
|
||||
content = (
|
||||
<div className={"mx-1"}>
|
||||
<div className={"font-bold my-4"}>{activity.resource?.title}</div>
|
||||
<div className={"font-bold my-4 break-all"}>{activity.resource?.title}</div>
|
||||
{activity.resource?.image && (
|
||||
<div>
|
||||
<img
|
||||
@@ -116,7 +116,7 @@ function ActivityCard({ activity }: { activity: Activity }) {
|
||||
} else if (activity.type === ActivityType.NewFile) {
|
||||
content = (
|
||||
<div>
|
||||
<h4 className={"font-bold py-2"}>{activity.file!.filename}</h4>
|
||||
<h4 className={"font-bold py-2 break-all"}>{activity.file!.filename}</h4>
|
||||
<div className={"text-sm my-1 comment_tile"}>
|
||||
<Markdown>
|
||||
{activity.file!.description.replaceAll("\n", " \n")}
|
||||
|
@@ -170,8 +170,8 @@ export default function CollectionPage() {
|
||||
</div>
|
||||
</div>
|
||||
<ResourcesView
|
||||
loader={() => {
|
||||
return network.listCollectionResources(collection!.id);
|
||||
loader={(page) => {
|
||||
return network.listCollectionResources(collection!.id, page);
|
||||
}}
|
||||
actionBuilder={
|
||||
isOwner
|
||||
|
@@ -13,7 +13,7 @@ func CreateCollection(uid uint, title string, article string, images []uint, pub
|
||||
UserID: uid,
|
||||
Title: title,
|
||||
Article: article,
|
||||
Public: public, // 新增
|
||||
Public: public,
|
||||
}
|
||||
|
||||
if err := tx.Create(&collection).Error; err != nil {
|
||||
@@ -73,7 +73,7 @@ func DeleteCollection(id uint) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Model(collection).Association("Resources").Clear(); err != nil {
|
||||
if err := tx.Model(&model.CollectionResource{}).Where("collection_id = ?", id).Delete(&model.CollectionResource{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -97,11 +97,12 @@ func AddResourceToCollection(collectionID uint, resourceID uint) error {
|
||||
return model.NewRequestError("Invalid resource ID")
|
||||
}
|
||||
|
||||
if err := tx.Model(collection).Association("Resources").Append(&model.Resource{
|
||||
Model: gorm.Model{
|
||||
ID: resourceID,
|
||||
},
|
||||
}); err != nil {
|
||||
collectionResource := &model.CollectionResource{
|
||||
CollectionID: collectionID,
|
||||
ResourceID: resourceID,
|
||||
}
|
||||
|
||||
if err := tx.Save(collectionResource).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -125,11 +126,7 @@ func RemoveResourceFromCollection(collectionID uint, resourceID uint) error {
|
||||
return model.NewRequestError("Invalid resource ID")
|
||||
}
|
||||
|
||||
if err := tx.Model(collection).Association("Resources").Delete(&model.Resource{
|
||||
Model: gorm.Model{
|
||||
ID: resourceID,
|
||||
},
|
||||
}); err != nil {
|
||||
if err := tx.Where("collection_id = ? AND resource_id = ?", collectionID, resourceID).Delete(&model.CollectionResource{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -143,7 +140,7 @@ func RemoveResourceFromCollection(collectionID uint, resourceID uint) error {
|
||||
|
||||
func GetCollectionByID(id uint) (*model.Collection, error) {
|
||||
collection := &model.Collection{}
|
||||
if err := db.Preload("Images").Preload("Resources").Preload("User").Where("id = ?", id).First(collection).Error; err != nil {
|
||||
if err := db.Preload("Images").Preload("User").Where("id = ?", id).First(collection).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return collection, nil
|
||||
@@ -164,7 +161,6 @@ func ListUserCollections(uid uint, page int, pageSize int, showPrivate bool) ([]
|
||||
|
||||
if err := query.
|
||||
Preload("Images").
|
||||
Preload("Resources").
|
||||
Offset((page - 1) * pageSize).
|
||||
Limit(pageSize).
|
||||
Find(&collections).Error; err != nil {
|
||||
@@ -180,9 +176,11 @@ func ListCollectionResources(collectionID uint, page int, pageSize int) ([]*mode
|
||||
var resources []*model.Resource
|
||||
var total int64
|
||||
|
||||
if err := db.Raw(`
|
||||
select count(*) from collection_resources
|
||||
where collection_id = ?`, collectionID).Scan(&total).Error; err != nil {
|
||||
if err := db.
|
||||
Model(&model.Resource{}).
|
||||
Joins("JOIN collection_resources ON collection_resources.resource_id = resources.id").
|
||||
Where("collection_resources.collection_id = ?", collectionID).
|
||||
Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
@@ -193,6 +191,7 @@ func ListCollectionResources(collectionID uint, page int, pageSize int) ([]*mode
|
||||
Preload("Tags").
|
||||
Joins("JOIN collection_resources ON collection_resources.resource_id = resources.id").
|
||||
Where("collection_resources.collection_id = ?", collectionID).
|
||||
Order("collection_resources.created_at DESC").
|
||||
Offset((page - 1) * pageSize).
|
||||
Limit(pageSize).
|
||||
Find(&resources).Error; err != nil {
|
||||
@@ -229,7 +228,6 @@ func SearchUserCollections(uid uint, keyword string, excludedRID uint, showPriva
|
||||
|
||||
if err := query.
|
||||
Preload("Images").
|
||||
Preload("Resources").
|
||||
Limit(10).
|
||||
Find(&collections).Error; err != nil {
|
||||
return nil, err
|
||||
|
@@ -47,6 +47,7 @@ func init() {
|
||||
&model.Comment{},
|
||||
&model.Activity{},
|
||||
&model.Collection{},
|
||||
&model.CollectionResource{},
|
||||
)
|
||||
}
|
||||
|
||||
|
@@ -10,7 +10,6 @@ type Collection struct {
|
||||
User User `gorm:"foreignKey:UserID;references:ID"`
|
||||
ResourcesCount int `gorm:"default:0"`
|
||||
Images []Image `gorm:"many2many:collection_images;"`
|
||||
Resources []Resource `gorm:"many2many:collection_resources;"`
|
||||
Public bool `gorm:"default:false"` // 新增公开/私有字段
|
||||
}
|
||||
|
||||
|
9
server/model/collection_resource.go
Normal file
9
server/model/collection_resource.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
type CollectionResource struct {
|
||||
CollectionID uint `gorm:"primaryKey"`
|
||||
ResourceID uint `gorm:"primaryKey"`
|
||||
CreatedAt time.Time
|
||||
}
|
Reference in New Issue
Block a user