示例#1
0
func (handler AccountHandler) PutPostJSON(w http.ResponseWriter, r *http.Request, user *usecases.User, title *Title) *WebError {
	vars := mux.Vars(r)
	var err error
	account := new(domain.Account)
	if vars["id"] != "create" {
		id, _ := strconv.Atoi(vars["id"])
		account, err = handler.AccountInteractor.FetchById(id, user.Id)
		if err != nil {
			log.Println(err)
			return nil
		}
	}
	rt, err := ParseJSONBody(r)
	if err != nil {
		log.Println(err)
		return nil
	}
	if name, ok := rt["Name"].(string); ok {
		account.Name = name
	}
	account.Type = InterfaceToInt(rt["Type"], 0)
	account.StartingAmount = InterfaceToInt64(rt["StartingAmount"], 0)
	account.Order = InterfaceToInt(rt["Order"], account.Order)
	if comment, ok := rt["Comment"].(string); ok {
		account.Comment = comment
	}
	if rt["CreditCard"] != nil {
		if card, ok := rt["CreditCard"].(map[string]interface{}); ok {
			if account.CreditCard == nil {
				account.CreditCard = new(domain.CreditCard)
			}
			account.CreditCard.LastDate = InterfaceToInt(card["LastDate"], 0)
			account.CreditCard.PayingMonth = InterfaceToInt(card["PayingMonth"], 0)
			account.CreditCard.PayingDay = InterfaceToInt(card["PayingDay"], 0)
			account.CreditCard.PayingAccount = InterfaceToInt(card["PayingAccount"], 0)
			account.CreditCard.Holiday = InterfaceToInt(card["Holiday"], 0)
		}
	}
	account.OwnerId = user.Id
	err = handler.AccountInteractor.Save(account)
	if err != nil {
		return &WebError{
			Error:   err,
			Code:    500,
			Message: "Error saving account",
			Json:    true,
		}
	}
	return nil
}