You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: profile.go
    path of file: ./repos/bzppx-codepub/app/controllers
    
    the code of the file until where you have to start completion: package controllers

import (
	"bzppx-codepub/app/models"
	"strings"
)

type ProfileController struct {
	BaseController
}

// 个人资料
func (this *ProfileController) MyBak() {
	this.Data["user"], _ = models.UserModel.GetUserByUserId(this.UserID)
	this.viewLayoutTitle("我的资料", "profile/my", "page"
    
func (this *ProfileController) Save() {

	givenName := strings.Trim(this.GetString("given_name", ""), "")
	email := strings.Trim(this.GetString("email", ""), "")
	mobile := strings.Trim(this.GetString("mobile", ""), "")

	if this.Data["loginUser"].(map[string]string)["api_auth_id"] != "0" {
		this.jsonError("auth_api的用户信息不能修改！")
	}

	if givenName == "" {
		this.jsonError("姓名不能为空！")
	}
	if email == "" {
		this.jsonError("邮箱不能为空！")
	}
	if mobile == "" {
		this.jsonError("手机号不能为空！")
	}

	_, err := models.UserModel.Update(this.Data["loginUser"].(map[string]string)["user_id"], map[string]interface{}{
		"given_name": givenName,
		"email":      email,
		"mobile":     mobile,
	})

	if err != nil {
		this.ErrorLog("修改个人资料失败：" + err.Error())
		this.jsonError("修改失败")
	} else {
		this.InfoLog("修改个人资料成功")
		this.jsonSuccess("我的资料修改成功", nil, "/profile/my", 3000)
	}
}