WASAPhoto/service/database/db-stream.go

64 lines
1.7 KiB
Go
Raw Permalink Normal View History

package database
import (
"github.com/notherealmarco/WASAPhoto/service/structures"
)
// Get user stream
func (db *appdbimpl) GetUserStream(uid string, start_index int, limit int) (*[]structures.Photo, error) {
2022-11-22 22:47:17 +01:00
// Get photos from the database
2022-12-09 03:53:16 +01:00
rows, err := db.c.Query(`SELECT "p"."user", "u"."name", "p"."id", "p"."date",
(
SELECT COUNT(*) AS "likes" FROM "likes" AS "l"
WHERE "l"."photo_id" = "p"."id"
),
(
SELECT COUNT(*) AS "comments" FROM "comments" AS "c"
WHERE "c"."photo" = "p"."id"
2022-12-09 03:53:16 +01:00
),
(
SELECT EXISTS (
SELECT * FROM "likes" AS "l"
WHERE "l"."photo_id" = "p"."id"
AND "l"."user" = ?
)
)
2022-12-09 03:53:16 +01:00
FROM "photos" AS "p", "users" AS "u"
WHERE "p"."user" = "u"."uid"
AND "p"."user" IN (
SELECT "followed" FROM "follows" WHERE "follower" = ?
)
AND "p"."user" NOT IN (
SELECT "user" FROM "bans" WHERE "ban" = ?
)
ORDER BY "p"."date" DESC
2022-11-22 22:02:44 +01:00
LIMIT ?
2022-12-09 03:53:16 +01:00
OFFSET ?`, uid, uid, uid, limit, start_index)
if err != nil {
// Return the error
return nil, err
}
photos := make([]structures.Photo, 0)
2022-12-06 22:14:12 +01:00
defer rows.Close()
for rows.Next() {
// If there is a next row, we create an instance of Photo and add it to the slice
var photo structures.Photo
2022-12-09 03:53:16 +01:00
err = rows.Scan(&photo.UID, &photo.Username, &photo.ID, &photo.Date, &photo.Likes, &photo.Comments, &photo.Liked)
if err != nil {
// Return the error
return nil, err
}
photos = append(photos, photo)
}
2022-12-06 22:33:10 +01:00
// We check if the iteration ended prematurely
if err = rows.Err(); err != nil {
return nil, err
}
return &photos, nil
}