mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 10:14:26 +08:00
modify geolocation storage type in database
This commit is contained in:
+16
-20
@@ -1,7 +1,6 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -573,7 +572,7 @@ func (a *TransactionsApi) TransactionGetHandler(c *core.Context) (interface{}, *
|
|||||||
|
|
||||||
transactionEditable := transaction.IsEditable(user, utcOffset, accountMap[transaction.AccountId], accountMap[transaction.RelatedAccountId])
|
transactionEditable := transaction.IsEditable(user, utcOffset, accountMap[transaction.AccountId], accountMap[transaction.RelatedAccountId])
|
||||||
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
|
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
|
||||||
transactionResp := transaction.ToTransactionInfoResponse(c, transactionTagIds, transactionEditable)
|
transactionResp := transaction.ToTransactionInfoResponse(transactionTagIds, transactionEditable)
|
||||||
|
|
||||||
if !transactionGetReq.TrimAccount {
|
if !transactionGetReq.TrimAccount {
|
||||||
if sourceAccount := accountMap[transaction.AccountId]; sourceAccount != nil {
|
if sourceAccount := accountMap[transaction.AccountId]; sourceAccount != nil {
|
||||||
@@ -665,7 +664,7 @@ func (a *TransactionsApi) TransactionCreateHandler(c *core.Context) (interface{}
|
|||||||
|
|
||||||
log.InfofWithRequestId(c, "[transactions.TransactionCreateHandler] user \"uid:%d\" has created a new transaction \"id:%d\" successfully", uid, transaction.TransactionId)
|
log.InfofWithRequestId(c, "[transactions.TransactionCreateHandler] user \"uid:%d\" has created a new transaction \"id:%d\" successfully", uid, transaction.TransactionId)
|
||||||
|
|
||||||
transactionResp := transaction.ToTransactionInfoResponse(c, tagIds, transactionEditable)
|
transactionResp := transaction.ToTransactionInfoResponse(tagIds, transactionEditable)
|
||||||
|
|
||||||
return transactionResp, nil
|
return transactionResp, nil
|
||||||
}
|
}
|
||||||
@@ -723,12 +722,6 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
|||||||
transactionTagIds = make([]int64, 0, 0)
|
transactionTagIds = make([]int64, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
var geoLocation []byte
|
|
||||||
|
|
||||||
if transactionModifyReq.GeoLocation != nil {
|
|
||||||
geoLocation, _ = json.Marshal(transactionModifyReq.GeoLocation)
|
|
||||||
}
|
|
||||||
|
|
||||||
newTransaction := &models.Transaction{
|
newTransaction := &models.Transaction{
|
||||||
TransactionId: transaction.TransactionId,
|
TransactionId: transaction.TransactionId,
|
||||||
Uid: uid,
|
Uid: uid,
|
||||||
@@ -739,7 +732,6 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
|||||||
Amount: transactionModifyReq.SourceAmount,
|
Amount: transactionModifyReq.SourceAmount,
|
||||||
HideAmount: transactionModifyReq.HideAmount,
|
HideAmount: transactionModifyReq.HideAmount,
|
||||||
Comment: transactionModifyReq.Comment,
|
Comment: transactionModifyReq.Comment,
|
||||||
GeoLocation: string(geoLocation),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
if transaction.Type == models.TRANSACTION_DB_TYPE_TRANSFER_OUT {
|
||||||
@@ -747,6 +739,11 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
|||||||
newTransaction.RelatedAccountAmount = transactionModifyReq.DestinationAmount
|
newTransaction.RelatedAccountAmount = transactionModifyReq.DestinationAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if transactionModifyReq.GeoLocation != nil {
|
||||||
|
newTransaction.GeoLongitude = transactionModifyReq.GeoLocation.Longitude
|
||||||
|
newTransaction.GeoLatitude = transactionModifyReq.GeoLocation.Latitude
|
||||||
|
}
|
||||||
|
|
||||||
if newTransaction.CategoryId == transaction.CategoryId &&
|
if newTransaction.CategoryId == transaction.CategoryId &&
|
||||||
utils.GetUnixTimeFromTransactionTime(newTransaction.TransactionTime) == utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime) &&
|
utils.GetUnixTimeFromTransactionTime(newTransaction.TransactionTime) == utils.GetUnixTimeFromTransactionTime(transaction.TransactionTime) &&
|
||||||
newTransaction.TimezoneUtcOffset == transaction.TimezoneUtcOffset &&
|
newTransaction.TimezoneUtcOffset == transaction.TimezoneUtcOffset &&
|
||||||
@@ -756,7 +753,8 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
|||||||
(transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountAmount == transaction.RelatedAccountAmount) &&
|
(transaction.Type != models.TRANSACTION_DB_TYPE_TRANSFER_OUT || newTransaction.RelatedAccountAmount == transaction.RelatedAccountAmount) &&
|
||||||
newTransaction.HideAmount == transaction.HideAmount &&
|
newTransaction.HideAmount == transaction.HideAmount &&
|
||||||
newTransaction.Comment == transaction.Comment &&
|
newTransaction.Comment == transaction.Comment &&
|
||||||
newTransaction.GeoLocation == transaction.GeoLocation &&
|
newTransaction.GeoLongitude == transaction.GeoLongitude &&
|
||||||
|
newTransaction.GeoLatitude == transaction.GeoLatitude &&
|
||||||
utils.Int64SliceEquals(tagIds, transactionTagIds) {
|
utils.Int64SliceEquals(tagIds, transactionTagIds) {
|
||||||
return nil, errs.ErrNothingWillBeUpdated
|
return nil, errs.ErrNothingWillBeUpdated
|
||||||
}
|
}
|
||||||
@@ -786,7 +784,7 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
|
|||||||
log.InfofWithRequestId(c, "[transactions.TransactionModifyHandler] user \"uid:%d\" has updated transaction \"id:%d\" successfully", uid, transactionModifyReq.Id)
|
log.InfofWithRequestId(c, "[transactions.TransactionModifyHandler] user \"uid:%d\" has updated transaction \"id:%d\" successfully", uid, transactionModifyReq.Id)
|
||||||
|
|
||||||
newTransaction.Type = transaction.Type
|
newTransaction.Type = transaction.Type
|
||||||
newTransactionResp := newTransaction.ToTransactionInfoResponse(c, tagIds, transactionEditable)
|
newTransactionResp := newTransaction.ToTransactionInfoResponse(tagIds, transactionEditable)
|
||||||
|
|
||||||
return newTransactionResp, nil
|
return newTransactionResp, nil
|
||||||
}
|
}
|
||||||
@@ -1013,7 +1011,7 @@ func (a *TransactionsApi) getTransactionListResult(c *core.Context, user *models
|
|||||||
|
|
||||||
transactionEditable := transaction.IsEditable(user, utcOffset, allAccounts[transaction.AccountId], allAccounts[transaction.RelatedAccountId])
|
transactionEditable := transaction.IsEditable(user, utcOffset, allAccounts[transaction.AccountId], allAccounts[transaction.RelatedAccountId])
|
||||||
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
|
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
|
||||||
result[i] = transaction.ToTransactionInfoResponse(c, transactionTagIds, transactionEditable)
|
result[i] = transaction.ToTransactionInfoResponse(transactionTagIds, transactionEditable)
|
||||||
|
|
||||||
if !trimAccount {
|
if !trimAccount {
|
||||||
if sourceAccount := allAccounts[transaction.AccountId]; sourceAccount != nil {
|
if sourceAccount := allAccounts[transaction.AccountId]; sourceAccount != nil {
|
||||||
@@ -1054,12 +1052,6 @@ func (a *TransactionsApi) createNewTransactionModel(uid int64, transactionCreate
|
|||||||
transactionDbType = models.TRANSACTION_DB_TYPE_TRANSFER_OUT
|
transactionDbType = models.TRANSACTION_DB_TYPE_TRANSFER_OUT
|
||||||
}
|
}
|
||||||
|
|
||||||
var geoLocation []byte
|
|
||||||
|
|
||||||
if transactionCreateReq.GeoLocation != nil {
|
|
||||||
geoLocation, _ = json.Marshal(transactionCreateReq.GeoLocation)
|
|
||||||
}
|
|
||||||
|
|
||||||
transaction := &models.Transaction{
|
transaction := &models.Transaction{
|
||||||
Uid: uid,
|
Uid: uid,
|
||||||
Type: transactionDbType,
|
Type: transactionDbType,
|
||||||
@@ -1070,7 +1062,6 @@ func (a *TransactionsApi) createNewTransactionModel(uid int64, transactionCreate
|
|||||||
Amount: transactionCreateReq.SourceAmount,
|
Amount: transactionCreateReq.SourceAmount,
|
||||||
HideAmount: transactionCreateReq.HideAmount,
|
HideAmount: transactionCreateReq.HideAmount,
|
||||||
Comment: transactionCreateReq.Comment,
|
Comment: transactionCreateReq.Comment,
|
||||||
GeoLocation: string(geoLocation),
|
|
||||||
CreatedIp: clientIp,
|
CreatedIp: clientIp,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1079,5 +1070,10 @@ func (a *TransactionsApi) createNewTransactionModel(uid int64, transactionCreate
|
|||||||
transaction.RelatedAccountAmount = transactionCreateReq.DestinationAmount
|
transaction.RelatedAccountAmount = transactionCreateReq.DestinationAmount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if transactionCreateReq.GeoLocation != nil {
|
||||||
|
transaction.GeoLongitude = transactionCreateReq.GeoLocation.Longitude
|
||||||
|
transaction.GeoLatitude = transactionCreateReq.GeoLocation.Latitude
|
||||||
|
}
|
||||||
|
|
||||||
return transaction
|
return transaction
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/log"
|
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -38,8 +35,8 @@ const (
|
|||||||
// Transaction represents transaction data stored in database
|
// Transaction represents transaction data stored in database
|
||||||
type Transaction struct {
|
type Transaction struct {
|
||||||
TransactionId int64 `xorm:"PK"`
|
TransactionId int64 `xorm:"PK"`
|
||||||
Uid int64 `xorm:"UNIQUE(UQE_transaction_uid_time) INDEX(IDX_transaction_uid_deleted_time) INDEX(IDX_transaction_uid_deleted_type_time) INDEX(IDX_transaction_uid_deleted_category_id_time) INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
|
Uid int64 `xorm:"UNIQUE(UQE_transaction_uid_time) INDEX(IDX_transaction_uid_deleted_time) INDEX(IDX_transaction_uid_deleted_type_time) INDEX(IDX_transaction_uid_deleted_category_id_time) INDEX(IDX_transaction_uid_deleted_account_id_time) INDEX(IDX_transaction_uid_deleted_time_longitude_latitude) NOT NULL"`
|
||||||
Deleted bool `xorm:"INDEX(IDX_transaction_uid_deleted_time) INDEX(IDX_transaction_uid_deleted_type_time) INDEX(IDX_transaction_uid_deleted_category_id_time) INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
|
Deleted bool `xorm:"INDEX(IDX_transaction_uid_deleted_time) INDEX(IDX_transaction_uid_deleted_type_time) INDEX(IDX_transaction_uid_deleted_category_id_time) INDEX(IDX_transaction_uid_deleted_account_id_time) INDEX(IDX_transaction_uid_deleted_time_longitude_latitude) NOT NULL"`
|
||||||
Type TransactionDbType `xorm:"INDEX(IDX_transaction_uid_deleted_type_time) NOT NULL"`
|
Type TransactionDbType `xorm:"INDEX(IDX_transaction_uid_deleted_type_time) NOT NULL"`
|
||||||
CategoryId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_category_id_time) NOT NULL"`
|
CategoryId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_category_id_time) NOT NULL"`
|
||||||
AccountId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
|
AccountId int64 `xorm:"INDEX(IDX_transaction_uid_deleted_account_id_time) NOT NULL"`
|
||||||
@@ -51,7 +48,8 @@ type Transaction struct {
|
|||||||
RelatedAccountAmount int64 `xorm:"NOT NULL"`
|
RelatedAccountAmount int64 `xorm:"NOT NULL"`
|
||||||
HideAmount bool `xorm:"NOT NULL"`
|
HideAmount bool `xorm:"NOT NULL"`
|
||||||
Comment string `xorm:"VARCHAR(255) NOT NULL"`
|
Comment string `xorm:"VARCHAR(255) NOT NULL"`
|
||||||
GeoLocation string `xorm:"VARCHAR(255)"`
|
GeoLongitude float64 `xorm:"INDEX(IDX_transaction_uid_deleted_time_longitude_latitude)"`
|
||||||
|
GeoLatitude float64 `xorm:"INDEX(IDX_transaction_uid_deleted_time_longitude_latitude)"`
|
||||||
CreatedIp string `xorm:"VARCHAR(39)"`
|
CreatedIp string `xorm:"VARCHAR(39)"`
|
||||||
CreatedUnixTime int64
|
CreatedUnixTime int64
|
||||||
UpdatedUnixTime int64
|
UpdatedUnixTime int64
|
||||||
@@ -283,7 +281,7 @@ func (t *Transaction) IsEditable(currentUser *User, utcOffset int16, account *Ac
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ToTransactionInfoResponse returns a view-object according to database model
|
// ToTransactionInfoResponse returns a view-object according to database model
|
||||||
func (t *Transaction) ToTransactionInfoResponse(c *core.Context, tagIds []int64, editable bool) *TransactionInfoResponse {
|
func (t *Transaction) ToTransactionInfoResponse(tagIds []int64, editable bool) *TransactionInfoResponse {
|
||||||
var transactionType TransactionType
|
var transactionType TransactionType
|
||||||
|
|
||||||
if t.Type == TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
if t.Type == TRANSACTION_DB_TYPE_MODIFY_BALANCE {
|
||||||
@@ -319,11 +317,9 @@ func (t *Transaction) ToTransactionInfoResponse(c *core.Context, tagIds []int64,
|
|||||||
|
|
||||||
geoLocation := &TransactionGeoLocationResponse{}
|
geoLocation := &TransactionGeoLocationResponse{}
|
||||||
|
|
||||||
if t.GeoLocation != "" {
|
if t.GeoLongitude != 0 || t.GeoLatitude != 0 {
|
||||||
err := json.Unmarshal([]byte(t.GeoLocation), geoLocation)
|
geoLocation.Longitude = t.GeoLongitude
|
||||||
if err != nil {
|
geoLocation.Latitude = t.GeoLatitude
|
||||||
log.WarnfWithRequestId(c, "[transaction.ToTransactionInfoResponse] cannot unmarshal geo location \"%s\", because %s", t.GeoLocation, err.Error())
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
geoLocation = nil
|
geoLocation = nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -542,8 +542,12 @@ func (s *TransactionService) ModifyTransaction(transaction *models.Transaction,
|
|||||||
updateCols = append(updateCols, "comment")
|
updateCols = append(updateCols, "comment")
|
||||||
}
|
}
|
||||||
|
|
||||||
if transaction.GeoLocation != oldTransaction.GeoLocation {
|
if transaction.GeoLongitude != oldTransaction.GeoLongitude {
|
||||||
updateCols = append(updateCols, "geo_location")
|
updateCols = append(updateCols, "geo_longitude")
|
||||||
|
}
|
||||||
|
|
||||||
|
if transaction.GeoLatitude != oldTransaction.GeoLatitude {
|
||||||
|
updateCols = append(updateCols, "geo_latitude")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get and verify tags
|
// Get and verify tags
|
||||||
@@ -959,7 +963,8 @@ func (s *TransactionService) GetRelatedTransferTransaction(originalTransaction *
|
|||||||
RelatedAccountId: originalTransaction.AccountId,
|
RelatedAccountId: originalTransaction.AccountId,
|
||||||
RelatedAccountAmount: originalTransaction.Amount,
|
RelatedAccountAmount: originalTransaction.Amount,
|
||||||
Comment: originalTransaction.Comment,
|
Comment: originalTransaction.Comment,
|
||||||
GeoLocation: originalTransaction.GeoLocation,
|
GeoLongitude: originalTransaction.GeoLongitude,
|
||||||
|
GeoLatitude: originalTransaction.GeoLatitude,
|
||||||
CreatedIp: originalTransaction.CreatedIp,
|
CreatedIp: originalTransaction.CreatedIp,
|
||||||
CreatedUnixTime: originalTransaction.CreatedUnixTime,
|
CreatedUnixTime: originalTransaction.CreatedUnixTime,
|
||||||
UpdatedUnixTime: originalTransaction.UpdatedUnixTime,
|
UpdatedUnixTime: originalTransaction.UpdatedUnixTime,
|
||||||
|
|||||||
Reference in New Issue
Block a user