Fix query errors

This commit is contained in:
Marco Realacci 2022-11-22 22:02:44 +01:00
parent 09adc06e18
commit ebb5c4e6f7
10 changed files with 73 additions and 32 deletions

View file

@ -60,6 +60,7 @@ type AppDatabase interface {
PostPhoto(uid string) (DBTransaction, int64, error)
DeletePhoto(uid string, photo int64) (bool, error)
PhotoExists(uid string, photo int64, requesting_uid string) (bool, error)
GetPhotoLikes(uid string, photo int64, requesting_uid string, start_index int, offset int) (QueryResult, *[]structures.UIDName, error)
LikePhoto(uid string, photo int64, liker_uid string) (QueryResult, error)

View file

@ -89,15 +89,17 @@ func (db *appdbimpl) GetComments(uid string, photo_id int64, requesting_uid stri
return ERR_NOT_FOUND, nil, err
}
rows, err := db.c.Query(`SELECT "c"."id", "c"."user", "c"."comment", "c"."date" FROM "comments" AS "c"
rows, err := db.c.Query(`SELECT "c"."id", "c"."user", "c"."comment", "c"."date", "u"."name"
FROM "comments" AS "c", "users" AS "u"
WHERE "c"."photo" = ?
AND "c"."user" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = ?
AND "bans"."ban" = "c"."user"
WHERE "bans"."user" = "c"."user"
AND "bans"."ban" = ?
)
OFFSET ?
LIMIT ?`, photo_id, requesting_uid, start_index, limit)
AND "u"."uid" = "c"."user"
LIMIT ?
OFFSET ?`, photo_id, requesting_uid, limit, start_index)
if err != nil {
return ERR_INTERNAL, nil, err
@ -109,7 +111,7 @@ func (db *appdbimpl) GetComments(uid string, photo_id int64, requesting_uid stri
for rows.Next() {
var c structures.Comment
err = rows.Scan(&c.CommentID, &c.UID, &c.Comment, &c.Date)
err = rows.Scan(&c.CommentID, &c.UID, &c.Comment, &c.Date, &c.Name)
if err != nil {
return ERR_INTERNAL, nil, err
}

View file

@ -22,12 +22,12 @@ func (db *appdbimpl) GetPhotoLikes(uid string, photo int64, requesting_uid strin
WHERE "likes"."photo_id" = ?
AND "likes"."user" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = ?
AND "bans"."ban" = "likes"."user"
WHERE "bans"."user" = "likes"."user"
AND "bans"."ban" = ?
)
AND "likes"."user" = "users"."uid"
OFFSET ?
LIMIT ?`, photo, requesting_uid, start_index, limit)
LIMIT ?
OFFSET ?`, photo, requesting_uid, limit, start_index)
if err != nil {
return ERR_INTERNAL, nil, err
}

View file

@ -52,3 +52,20 @@ func (db *appdbimpl) photoExists(uid string, photo int64) (bool, error) {
}
return cnt > 0, nil
}
func (db *appdbimpl) PhotoExists(uid string, photo int64, requesting_uid string) (bool, error) {
var cnt int64
err := db.c.QueryRow(`SELECT COUNT(*) FROM "photos"
WHERE "id" = ?
AND "user" = ?
AND "user" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = "photos"."user"
AND "bans"."ban" = ?
)`, photo, uid, requesting_uid).Scan(&cnt)
if err != nil {
return false, err
}
return cnt > 0, nil
}

View file

@ -26,8 +26,8 @@ func (db *appdbimpl) GetUserStream(uid string, start_index int, limit int) (*[]s
SELECT "user" FROM "bans" WHERE "ban" = ?
)
ORDER BY "p"."date" DESC
OFFSET ?
LIMIT ?`, uid, uid, start_index, limit)
LIMIT ?
OFFSET ?`, uid, uid, limit, start_index)
if err != nil {
// Return the error
return nil, err

View file

@ -66,8 +66,8 @@ func (db *appdbimpl) GetUserFollowers(uid string, requesting_uid string, start_i
AND "follows"."follower" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = ?
AND "bans"."ban" = "follows"."follower"
WHERE "bans"."user" = "follows"."follower"
AND "bans"."ban" = ?
)
AND "followed" = ?
@ -102,13 +102,13 @@ func (db *appdbimpl) GetUserFollowing(uid string, requesting_uid string, start_i
AND "follows"."followed" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = ?
AND "bans"."ban" = "follows"."followed"
WHERE "bans"."user" = "follows"."followed"
AND "bans"."ban" = ?
)
AND "follower" = ?
OFFSET ?
LIMIT ?`, uid, requesting_uid, start_index, offset)
LIMIT ?
OFFSET ?`, uid, requesting_uid, offset, start_index)
following, err := db.uidNameQuery(rows, err)
@ -237,11 +237,11 @@ func (db *appdbimpl) IsBanned(uid string, banner string) (bool, error) {
func (db *appdbimpl) GetUserBans(uid string, start_index int, limit int) (*[]structures.UIDName, error) {
rows, err := db.c.Query(`SELECT "ban", "user"."name" FROM "bans", "users"
rows, err := db.c.Query(`SELECT "ban", "users"."name" FROM "bans", "users"
WHERE "bans"."ban" = "users"."uid"
AND "bans"."user" = ?
OFFSET ?
LIMIT ?`, uid, start_index, limit)
LIMIT ?
OFFSET ?`, uid, limit, start_index)
bans, err := db.uidNameQuery(rows, err)
@ -256,15 +256,15 @@ func (db *appdbimpl) GetUserBans(uid string, start_index int, limit int) (*[]str
func (db *appdbimpl) SearchByName(name string, requesting_uid string, start_index int, limit int) (*[]structures.UIDName, error) {
rows, err := db.c.Query(`SELECT "uid", "name" FROM "users"
WHERE "name" LIKE ?
WHERE "name" LIKE '%' || ? || '%'
AND "uid" NOT IN (
SELECT "bans"."user" FROM "bans"
WHERE "bans"."user" = "users"."uid"
AND "bans"."ban" = ?
)
OFFSET ?
LIMIT ?`, name, requesting_uid, start_index, limit)
LIMIT ?
OFFSET ?`, name, requesting_uid, limit, start_index)
users, err := db.uidNameQuery(rows, err)