Преглед изворни кода

Add user letterhead endpoints

master
Immanuel Onyeka пре 1 година
родитељ
комит
7fa03cc393
4 измењених фајлова са 96 додато и 1 уклоњено
  1. +4
    -0
      assets/main.css
  2. +22
    -0
      components/app.vue
  3. +1
    -1
      components/settings.vue
  4. +69
    -0
      skouter.go

+ 4
- 0
assets/main.css Прегледај датотеку

@@ -404,3 +404,7 @@ section.estimates .details {
flex-flow: column;
gap: 10px;
}

canvas.displayer {
margin: auto;
}

+ 22
- 0
components/app.vue Прегледај датотеку

@@ -112,6 +112,13 @@ function getUser() {
}
this.user.avatar = b
return getLetterhead(token)
}).then (result => {
if (!result || !result.length) return // Exit if token is invalid
this.user = result[0]
if (this.user.letterhead) return
return getAvatar(token)
})

}
@@ -126,11 +133,26 @@ function getAvatar(t) {
}).then(r => r.blob())
}

function getLetterhead(t) {
return fetch("/api/user/letterhead",
{method: 'GET',
headers: {
"Accept": "application/json",
"Authorization": `Bearer ${t || this.token}`,
}
}).then(r => r.blob())
}

function updateAvatar() {
const token = getCookie("skouter")
getAvatar(token).then(b => this.user.avatar = b)
}

function updateLetterhead() {
const token = getCookie("skouter")
getAvatar(token).then(b => this.user.letterhead = b)
}

function getFees() {
const token = getCookie("skouter")


+ 1
- 1
components/settings.vue Прегледај датотеку

@@ -4,7 +4,7 @@

<section class="form inputs">
<h3>Avatar</h3>
<canvas width="200" height="200" ref="canvas"></canvas>
<canvas class="displayer" width="200" height="200" ref="canvas"></canvas>
<input type="file"
@change="e => uploadAvatar(e.target.files[0])"
/>


+ 69
- 0
skouter.go Прегледај датотеку

@@ -993,6 +993,40 @@ func insertAvatar(db *sql.DB, user int, img []byte) error {
return nil
}

func fetchLetterhead(db *sql.DB, user int) ( []byte, error ) {
var img []byte
var query string
var err error

query = `SELECT
letterhead
FROM user WHERE user.id = ?
`
row := db.QueryRow(query, user)
err = row.Scan(&img)

if err != nil {
return img, err
}

return img, nil
}


func insertLetterhead(db *sql.DB, user int, img []byte) error {
query := `UPDATE user
SET letterhead = ?
WHERE id = ?
`
_, err := db.Exec(query, img, user)
if err != nil {
return err
}

return nil
}


func setAvatar(w http.ResponseWriter, db *sql.DB, r *http.Request) {
var validTypes []string = []string{"image/png", "image/jpeg"}
var isValidType bool
@@ -1020,6 +1054,33 @@ func getAvatar(w http.ResponseWriter, db *sql.DB, r *http.Request) {
w.Write(img)
}

func setLetterhead(w http.ResponseWriter, db *sql.DB, r *http.Request) {
var validTypes []string = []string{"image/png", "image/jpeg"}
var isValidType bool
claims, err := getClaims(r)
if err != nil { http.Error(w, "Invalid token.", 422); return }
img, err := io.ReadAll(r.Body)
if err != nil { http.Error(w, "Invalid file.", 422); return }
for _, v := range validTypes {
if v == http.DetectContentType(img) { isValidType = true }
}
if !isValidType { http.Error(w, "Invalid file type.", 422); return }

err = insertAvatar(db, claims.Id, img)
if err != nil { http.Error(w, "Could not insert.", 500); return }
}

func getLetterhead(w http.ResponseWriter, db *sql.DB, r *http.Request) {
claims, err := getClaims(r)
if err != nil { http.Error(w, "Invalid token.", 422); return }
img, err := fetchLetterhead(db, claims.Id)
if err != nil { http.Error(w, "Could not retrieve.", 500); return }
w.Header().Set("Content-Type", http.DetectContentType(img))
w.Write(img)
}

func queryBorrower(db *sql.DB, id int) ( Borrower, error ) {
var borrower Borrower
var query string
@@ -1671,6 +1732,14 @@ func api(w http.ResponseWriter, r *http.Request) {
r.Method == http.MethodPost &&
guard(r, 1):
setAvatar(w, db, r)
case match(p, "/api/user/letterhead", &args) &&
r.Method == http.MethodGet &&
guard(r, 1):
getLetterhead(w, db, r)
case match(p, "/api/user/letterhead", &args) &&
r.Method == http.MethodPost &&
guard(r, 1):
setLetterhead(w, db, r)
case match(p, "/api/fees", &args) &&
r.Method == http.MethodGet &&
guard(r, 1):


Loading…
Откажи
Сачувај