Skip to content

Commit a225c05

Browse files
authored
Left side currency and hidden claimers option (#58)
1 parent f514750 commit a225c05

16 files changed

+239
-146
lines changed

.github/workflows/docker-image.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
- name: Replace version variable
4444
run: sed -i 's/{{RELEASE_TAG}}/${{ github.event.release.tag_name }}/g' config/config.go # Replace release variable with the name of this release
4545
- name: Build and push
46-
uses: docker/build-push-action@v5.1.0
46+
uses: docker/build-push-action@v6.14.0
4747
with:
4848
builder: ${{ steps.buildx.outputs.name }}
4949
file: ./Dockerfile

controllers/currency.go

+7-9
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import (
66
"aunefyren/poenskelisten/utilities"
77
"log"
88
"net/http"
9+
"strings"
910

1011
"github.com/gin-gonic/gin"
1112
)
1213

1314
func APIGetCurrency(context *gin.Context) {
14-
1515
// Get configuration
1616
config, err := config.GetConfig()
1717
if err != nil {
@@ -21,13 +21,11 @@ func APIGetCurrency(context *gin.Context) {
2121
return
2222
}
2323

24-
context.JSON(http.StatusOK, gin.H{"message": "Currency retrieved.", "currency": config.PoenskelistenCurrency, "padding": config.PoenskelistenCurrencyPad})
25-
24+
context.JSON(http.StatusOK, gin.H{"message": "Currency retrieved.", "currency": config.PoenskelistenCurrency, "padding": config.PoenskelistenCurrencyPad, "left": config.PoenskelistenCurrencyLeft})
2625
}
2726

2827
func APIUpdateCurrency(context *gin.Context) {
29-
30-
var currency models.UpdateCurrencyrequest
28+
var currency models.UpdateCurrencyRequest
3129

3230
if err := context.ShouldBindJSON(&currency); err != nil {
3331
log.Println("Failed to parse request. Error: " + err.Error())
@@ -44,7 +42,7 @@ func APIUpdateCurrency(context *gin.Context) {
4442
context.Abort()
4543
return
4644
} else if !stringMatch {
47-
log.Println("Currencystring failed validation.")
45+
log.Println("Currency string failed validation.")
4846
context.JSON(http.StatusBadRequest, gin.H{"error": requirements})
4947
context.Abort()
5048
return
@@ -59,8 +57,9 @@ func APIUpdateCurrency(context *gin.Context) {
5957
return
6058
}
6159

62-
configFile.PoenskelistenCurrency = currency.PoenskelistenCurrency
60+
configFile.PoenskelistenCurrency = strings.TrimSpace(currency.PoenskelistenCurrency)
6361
configFile.PoenskelistenCurrencyPad = currency.PoenskelistenCurrencyPad
62+
configFile.PoenskelistenCurrencyLeft = currency.PoenskelistenCurrencyLeft
6463

6564
err = config.SaveConfig(configFile)
6665
if err != nil {
@@ -70,6 +69,5 @@ func APIUpdateCurrency(context *gin.Context) {
7069
return
7170
}
7271

73-
context.JSON(http.StatusOK, gin.H{"message": "Currency updated.", "currency": configFile.PoenskelistenCurrency, "padding": configFile.PoenskelistenCurrencyPad})
74-
72+
context.JSON(http.StatusOK, gin.H{"message": "Currency updated.", "currency": configFile.PoenskelistenCurrency, "padding": configFile.PoenskelistenCurrencyPad, "left": configFile.PoenskelistenCurrencyLeft})
7573
}

controllers/wish.go

+43-13
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"net/url"
1414
"sort"
1515
"strings"
16+
"time"
1617

1718
"github.com/gin-gonic/gin"
1819
"github.com/google/uuid"
@@ -65,7 +66,7 @@ func GetWishesFromWishlist(context *gin.Context) {
6566
return
6667
}
6768

68-
WishlistMembership, err := database.VerifyUserMembershipToGroupmembershipToWishlist(UserID, wishlist_id_int)
69+
WishlistMembership, err := database.VerifyUserMembershipToGroupMembershipToWishlist(UserID, wishlist_id_int)
6970
if err != nil {
7071
log.Println("Failed to verify membership of group. Error: " + err.Error())
7172
context.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to verify membership of group."})
@@ -121,7 +122,14 @@ func GetWishesFromWishlist(context *gin.Context) {
121122
return wishObjects[j].UpdatedAt.Before(wishObjects[i].UpdatedAt)
122123
})
123124

124-
context.JSON(http.StatusOK, gin.H{"owner_id": owner_id, "collaborators": wishlistCollabsIntArray, "wishes": wishObjects, "message": "Wishes retrieved.", "currency": config.PoenskelistenCurrency, "padding": config.PoenskelistenCurrencyPad})
125+
context.JSON(http.StatusOK, gin.H{
126+
"owner_id": owner_id,
127+
"collaborators": wishlistCollabsIntArray,
128+
"wishes": wishObjects, "message": "Wishes retrieved.",
129+
"currency": config.PoenskelistenCurrency,
130+
"currency_padding": config.PoenskelistenCurrencyPad,
131+
"currency_left": config.PoenskelistenCurrencyLeft,
132+
})
125133
}
126134

127135
func ConvertWishToWishObject(wish models.Wish, requestUserID *uuid.UUID) (models.WishObject, error) {
@@ -134,7 +142,7 @@ func ConvertWishToWishObject(wish models.Wish, requestUserID *uuid.UUID) (models
134142
return models.WishObject{}, err
135143
}
136144

137-
wishclaimobject, err := database.GetWishClaimFromWish(wish.ID)
145+
wishClaimObject, err := database.GetWishClaimFromWish(wish.ID)
138146
if err != nil {
139147
log.Println("Failed to get wish claims wish'" + wish.ID.String() + "'. Returning. Error: " + err.Error())
140148
return models.WishObject{}, err
@@ -167,7 +175,8 @@ func ConvertWishToWishObject(wish models.Wish, requestUserID *uuid.UUID) (models
167175
log.Println("Failed to get wishlist collaborator from database. Error: " + err.Error())
168176
return models.WishObject{}, errors.New("Failed to get wishlist from database.")
169177
}
170-
wishlistCollabObjects, err := ConvertWishlistCollaberatorsToWishlistCollaberatorObjects(wishlistCollabs)
178+
179+
wishlistCollabObjects, err := ConvertWishlistCollaboratorsToWishlistCollaboratorsObjects(wishlistCollabs)
171180
if err != nil {
172181
log.Println("Failed to convert wishlist collaborators to objects. Error: " + err.Error())
173182
return models.WishObject{}, errors.New("Failed to convert wishlist collaborators to objects.")
@@ -182,20 +191,34 @@ func ConvertWishToWishObject(wish models.Wish, requestUserID *uuid.UUID) (models
182191
// Purge the reply if the requester is the owner
183192
if requestUserID != nil {
184193
if wish.OwnerID == *requestUserID {
185-
wishclaimobject = []models.WishClaimObject{}
194+
wishClaimObject = []models.WishClaimObject{}
186195
}
187196

188197
if wishlistOwnerUser.ID == *requestUserID {
189-
wishclaimobject = []models.WishClaimObject{}
198+
wishClaimObject = []models.WishClaimObject{}
190199
}
191200

192201
for _, wishCollaborator := range wishlistCollabObjects {
193202
if wishCollaborator.User.ID == *requestUserID {
194-
wishclaimobject = []models.WishClaimObject{}
203+
wishClaimObject = []models.WishClaimObject{}
195204
}
196205
}
197206
}
198207

208+
// Purge claim details if claimers are hidden
209+
if wishlist.HideClaimers != nil && *wishlist.HideClaimers == true {
210+
newClaimers := []models.WishClaimObject{}
211+
for _, wishClaim := range wishClaimObject {
212+
wishClaim.User.CreatedAt = time.Now()
213+
wishClaim.User.UpdatedAt = time.Now()
214+
wishClaim.User.Email = nil
215+
wishClaim.User.FirstName = "Hidden"
216+
wishClaim.User.LastName = "User"
217+
newClaimers = append(newClaimers, wishClaim)
218+
}
219+
wishClaimObject = newClaimers
220+
}
221+
199222
wishObject.CreatedAt = wish.CreatedAt
200223
wishObject.DeletedAt = wish.DeletedAt
201224
wishObject.Enabled = wish.Enabled
@@ -204,14 +227,16 @@ func ConvertWishToWishObject(wish models.Wish, requestUserID *uuid.UUID) (models
204227
wishObject.Note = wish.Note
205228
wishObject.Owner = user_object
206229
wishObject.WishlistOwner = wishlistOwnerUser
207-
wishObject.WishClaim = wishclaimobject
230+
wishObject.WishClaim = wishClaimObject
208231
wishObject.URL = wish.URL
209232
wishObject.Price = wish.Price
210233
wishObject.UpdatedAt = wish.UpdatedAt
211234
wishObject.WishlistID = wish.WishlistID
212235
wishObject.WishClaimable = *wishlist.Claimable
213236
wishObject.Collaborators = wishlistCollabObjects
214237
wishObject.Currency = configFile.PoenskelistenCurrency
238+
wishObject.CurrencyPadding = configFile.PoenskelistenCurrencyPad
239+
wishObject.CurrencyLeft = configFile.PoenskelistenCurrencyLeft
215240

216241
return wishObject, nil
217242

@@ -298,7 +323,6 @@ func RegisterWish(context *gin.Context) {
298323
context.Abort()
299324
return
300325
} else if !MembershipStatus && !collaborationStatus {
301-
//context.JSON(http.StatusInternalServerError, gin.H{"error": groupmembershiprecord.Error.Error()})
302326
context.JSON(http.StatusBadRequest, gin.H{"error": "You are not an owner or collaborator of this wishlist."})
303327
context.Abort()
304328
return
@@ -541,7 +565,13 @@ func DeleteWish(context *gin.Context) {
541565
return
542566
}
543567

544-
utilities.SendSMTPDeletedClaimedWish(wishClaim.User, wishObject, wishlistObject)
568+
wishClaimUser, err := database.GetAllUserInformation(wishClaim.User.ID)
569+
if err != nil {
570+
log.Println("Failed to get user object for user. Error: " + err.Error())
571+
return
572+
}
573+
574+
utilities.SendSMTPDeletedClaimedWish(wishClaimUser, wishObject, wishlistObject)
545575
}
546576
}
547577
}
@@ -632,7 +662,7 @@ func RegisterWishClaim(context *gin.Context) {
632662
return
633663
}
634664

635-
WishlistMembership, err := database.VerifyUserMembershipToGroupmembershipToWishlist(UserID, *db_wishlist_id)
665+
WishlistMembership, err := database.VerifyUserMembershipToGroupMembershipToWishlist(UserID, *db_wishlist_id)
636666
if err != nil {
637667
log.Println("Failed to verify membership to wishlist. Error: " + err.Error())
638668
context.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to verify membership to wishlist."})
@@ -797,7 +827,7 @@ func RemoveWishClaim(context *gin.Context) {
797827
return
798828
}
799829

800-
WishlistMembership, err := database.VerifyUserMembershipToGroupmembershipToWishlist(UserID, *db_wishlist_id)
830+
WishlistMembership, err := database.VerifyUserMembershipToGroupMembershipToWishlist(UserID, *db_wishlist_id)
801831
if err != nil {
802832
log.Println("Failed to verify membership to wishlist. Error: " + err.Error())
803833
context.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to verify membership to wishlist."})
@@ -1111,7 +1141,7 @@ func APIGetWish(context *gin.Context) {
11111141
return
11121142
}
11131143

1114-
WishlistMembership, err := database.VerifyUserMembershipToGroupmembershipToWishlist(userID, *wishlistID)
1144+
WishlistMembership, err := database.VerifyUserMembershipToGroupMembershipToWishlist(userID, *wishlistID)
11151145
if err != nil {
11161146
log.Println("Failed to verify wishlist membership. Error: " + err.Error())
11171147
context.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to verify wishlist membership."})

controllers/wishlist.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ func RegisterWishlist(context *gin.Context) {
132132
wishlistdb.Description = wishlist.Description
133133
wishlistdb.Name = wishlist.Name
134134
wishlistdb.Claimable = &wishlist.Claimable
135+
wishlistdb.HideClaimers = &wishlist.HideClaimers
135136
wishlistdb.ID = uuid.New()
136137
wishlistdb.Public = &wishlist.Public
137138
wishlistdb.PublicHash = uuid.New()
@@ -357,7 +358,7 @@ func GetWishlist(context *gin.Context) {
357358
return
358359
}
359360

360-
WishlistMembership, err := database.VerifyUserMembershipToGroupmembershipToWishlist(UserID, wishlist_id_int)
361+
WishlistMembership, err := database.VerifyUserMembershipToGroupMembershipToWishlist(UserID, wishlist_id_int)
361362
if err != nil {
362363
log.Println("Failed to verify membership to group. Error: " + err.Error())
363364
context.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to verify membership to group."})
@@ -915,6 +916,7 @@ func APIUpdateWishlist(context *gin.Context) {
915916
wishlistOriginal.Description = wishlist.Description
916917
wishlistOriginal.Name = wishlist.Name
917918
wishlistOriginal.Claimable = &wishlist.Claimable
919+
wishlistOriginal.HideClaimers = &wishlist.HideClaimers
918920
wishlistOriginal.Expires = &wishlist.Expires
919921
wishlistOriginal.Public = &wishlist.Public
920922
wishlistOriginal.PublicHash = uuid.New()
@@ -946,7 +948,7 @@ func APIUpdateWishlist(context *gin.Context) {
946948
context.JSON(http.StatusCreated, gin.H{"message": "Wishlist updated.", "wishlist": wishlistObject, "public_url": configFile.PoenskelistenExternalURL})
947949
}
948950

949-
func ConvertWishlistCollaberatorToWishlistCollaberatorObject(wishlistCollab models.WishlistCollaborator) (wishlistCollabObject models.WishlistCollaboratorObject, err error) {
951+
func ConvertWishlistCollaboratorToWishlistCollaboratorObject(wishlistCollab models.WishlistCollaborator) (wishlistCollabObject models.WishlistCollaboratorObject, err error) {
950952
err = nil
951953
wishlistCollabObject = models.WishlistCollaboratorObject{}
952954

@@ -970,12 +972,12 @@ func ConvertWishlistCollaberatorToWishlistCollaberatorObject(wishlistCollab mode
970972
return
971973
}
972974

973-
func ConvertWishlistCollaberatorsToWishlistCollaberatorObjects(wishlistCollabs []models.WishlistCollaborator) (wishlistCollabObjects []models.WishlistCollaboratorObject, err error) {
975+
func ConvertWishlistCollaboratorsToWishlistCollaboratorsObjects(wishlistCollabs []models.WishlistCollaborator) (wishlistCollabObjects []models.WishlistCollaboratorObject, err error) {
974976
err = nil
975977
wishlistCollabObjects = []models.WishlistCollaboratorObject{}
976978

977979
for _, wishlistCollab := range wishlistCollabs {
978-
wishlistCollabObject, err := ConvertWishlistCollaberatorToWishlistCollaberatorObject(wishlistCollab)
980+
wishlistCollabObject, err := ConvertWishlistCollaboratorToWishlistCollaboratorObject(wishlistCollab)
979981
if err != nil {
980982
log.Println("Failed to get wishlist collaberator object for '" + wishlistCollab.ID.String() + "'. Skipping. Error: " + err.Error())
981983
continue
@@ -1007,7 +1009,7 @@ func ConvertWishlistToWishlistObject(wishlist models.Wishlist, RequestUserID *uu
10071009
return models.WishlistUser{}, err
10081010
}
10091011

1010-
wishlistsCollabObjects, err := ConvertWishlistCollaberatorsToWishlistCollaberatorObjects(wishlistsCollabs)
1012+
wishlistsCollabObjects, err := ConvertWishlistCollaboratorsToWishlistCollaboratorsObjects(wishlistsCollabs)
10111013
if err != nil {
10121014
log.Println("Failed to convert wishlist collaberators to wishlist collaberator objects. Returning. Error: " + err.Error())
10131015
return models.WishlistUser{}, err
@@ -1036,6 +1038,7 @@ func ConvertWishlistToWishlistObject(wishlist models.Wishlist, RequestUserID *uu
10361038
wishlistObject.Name = wishlist.Name
10371039
wishlistObject.UpdatedAt = wishlist.UpdatedAt
10381040
wishlistObject.Claimable = wishlist.Claimable
1041+
wishlistObject.HideClaimers = wishlist.HideClaimers
10391042
wishlistObject.Collaborators = wishlistsCollabObjects
10401043
wishlistObject.Expires = wishlist.Expires
10411044
wishlistObject.Public = wishlist.Public

database/wish.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,14 @@ func GetWishClaimFromWish(WishID uuid.UUID) ([]models.WishClaimObject, error) {
8787
return []models.WishClaimObject{}, err
8888
}
8989

90-
wish_with_user.User = user_object
90+
userObjectMinimal := models.UserMinimal{
91+
GormModel: user_object.GormModel,
92+
FirstName: user_object.FirstName,
93+
LastName: user_object.LastName,
94+
Email: user_object.Email,
95+
}
96+
97+
wish_with_user.User = userObjectMinimal
9198
wish_with_user.CreatedAt = wish_claim.CreatedAt
9299
wish_with_user.DeletedAt = wish_claim.DeletedAt
93100
wish_with_user.Enabled = wish_claim.Enabled

database/wishlist.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func GetWishlistOwner(WishlistID uuid.UUID) (uuid.UUID, error) {
230230
}
231231

232232
// Verify if a group ID is a member of a wishlist
233-
func VerifyUserMembershipToGroupmembershipToWishlist(UserID uuid.UUID, WishlistID uuid.UUID) (bool, error) {
233+
func VerifyUserMembershipToGroupMembershipToWishlist(UserID uuid.UUID, WishlistID uuid.UUID) (bool, error) {
234234
var wishlistmembership models.WishlistMembership
235235
wishlistmembershiprecord := Instance.Where("`wishlist_memberships`.enabled = ?", 1).Where("`wishlist_memberships`.wishlist_id = ?", WishlistID).Joins("JOIN `groups` on `groups`.id = `wishlist_memberships`.group_id").Where("`groups`.enabled = ?", 1).Joins("JOIN `group_memberships` on `group_memberships`.group_id = `groups`.id").Where("`group_memberships`.enabled = ?", 1).Where("`group_memberships`.member_id = ?", UserID).Find(&wishlistmembership)
236236
if wishlistmembershiprecord.Error != nil {

models/config.go

+29-27
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
11
package models
22

33
type ConfigStruct struct {
4-
Timezone string `json:"timezone"`
5-
PrivateKey string `json:"private_key"`
6-
DBType string `json:"db_type"`
7-
DBUsername string `json:"db_username"`
8-
DBPassword string `json:"db_password"`
9-
DBName string `json:"db_name"`
10-
DBIP string `json:"db_ip"`
11-
DBPort int `json:"db_port"`
12-
DBSSL bool `json:"db_ssl"`
13-
DBLocation string `json:"db_location"`
14-
PoenskelistenPort int `json:"poenskelisten_port"`
15-
PoenskelistenName string `json:"poenskelisten_name"`
16-
PoenskelistenExternalURL string `json:"poenskelisten_external_url"`
17-
PoenskelistenVersion string `json:"poenskelisten_version"`
18-
PoenskelistenCurrency string `json:"poenskelisten_currency"`
19-
PoenskelistenCurrencyPad bool `json:"poenskelisten_currency_pad"`
20-
PoenskelistenEnvironment string `json:"poenskelisten_environment"`
21-
PoenskelistenTestEmail string `json:"poenskelisten_test_email"`
22-
SMTPEnabled bool `json:"smtp_enabled"`
23-
SMTPHost string `json:"smtp_host"`
24-
SMTPPort int `json:"smtp_port"`
25-
SMTPUsername string `json:"smtp_username"`
26-
SMTPPassword string `json:"smtp_password"`
27-
SMTPFrom string `json:"smtp_from"`
4+
Timezone string `json:"timezone"`
5+
PrivateKey string `json:"private_key"`
6+
DBType string `json:"db_type"`
7+
DBUsername string `json:"db_username"`
8+
DBPassword string `json:"db_password"`
9+
DBName string `json:"db_name"`
10+
DBIP string `json:"db_ip"`
11+
DBPort int `json:"db_port"`
12+
DBSSL bool `json:"db_ssl"`
13+
DBLocation string `json:"db_location"`
14+
PoenskelistenPort int `json:"poenskelisten_port"`
15+
PoenskelistenName string `json:"poenskelisten_name"`
16+
PoenskelistenExternalURL string `json:"poenskelisten_external_url"`
17+
PoenskelistenVersion string `json:"poenskelisten_version"`
18+
PoenskelistenCurrency string `json:"poenskelisten_currency"`
19+
PoenskelistenCurrencyPad bool `json:"poenskelisten_currency_pad"`
20+
PoenskelistenCurrencyLeft bool `json:"poenskelisten_currency_left"`
21+
PoenskelistenEnvironment string `json:"poenskelisten_environment"`
22+
PoenskelistenTestEmail string `json:"poenskelisten_test_email"`
23+
SMTPEnabled bool `json:"smtp_enabled"`
24+
SMTPHost string `json:"smtp_host"`
25+
SMTPPort int `json:"smtp_port"`
26+
SMTPUsername string `json:"smtp_username"`
27+
SMTPPassword string `json:"smtp_password"`
28+
SMTPFrom string `json:"smtp_from"`
2829
}
2930

30-
type UpdateCurrencyrequest struct {
31-
PoenskelistenCurrency string `json:"poenskelisten_currency"`
32-
PoenskelistenCurrencyPad bool `json:"poenskelisten_currency_pad"`
31+
type UpdateCurrencyRequest struct {
32+
PoenskelistenCurrency string `json:"poenskelisten_currency"`
33+
PoenskelistenCurrencyPad bool `json:"poenskelisten_currency_pad"`
34+
PoenskelistenCurrencyLeft bool `json:"poenskelisten_currency_left"`
3335
}

models/user.go

+7
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ type User struct {
2020
ResetExpiration *time.Time `json:"reset_expiration"`
2121
}
2222

23+
type UserMinimal struct {
24+
GormModel
25+
FirstName string `json:"first_name"`
26+
LastName string `json:"last_name"`
27+
Email *string `json:"email"`
28+
}
29+
2330
type UserCreationRequest struct {
2431
FirstName string `json:"first_name"`
2532
LastName string `json:"last_name"`

0 commit comments

Comments
 (0)