/
AndyBer
/
AvitoTest
Обзор
Документация
Войти
/
AndyBer
/
AvitoTest
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
draft.txt
191 строка
4 KB
AndyBer-creator
first_commit
16 сен 2024, 13:38
16 сен 2024, 13:38
d91906c
Код
Авторство
О чём код?
type Employee struct { Id int Username string FirstName string LastName string Created ????? Updated ????? } type Organization struct { Id int Name string Description string TypeOrganizationType ???? Created ????? Updated ????? } type OrganizationResponsible struct { Id int OrganizationID int UserId int } "context" "database/sql" "log" "net/http" "text/template" _ "github.com/lib/pq" func dbConn(ctx context.Context) (db *sql.DB) { //dbDriver := "postgres" //dbUser := "postgres" //dbPass := "root" //dbName := "postgres" //host = "localhost" //port = 5432 //user = "postgres" //password = "root" //dbName = "postgres" db, err := sql.Open("postgres", "postgres://postgres:root@localhost:5432?sslmode=disable") //db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) //dbDriver, dbUser+":"+dbPass+"@/"+dbName //) if err != nil { //отработка ошибки подключения к базе panic(err.Error()) } err = db.PingContext(ctx) if err != nil { panic(err.Error()) } return db } var tmpl = template.Must(template.ParseGlob("api/*")) func Index(w http.ResponseWriter, r *http.Request) { db := dbConn(context.Background()) selDB, err := db.Query("SELECT * FROM Employee ORDER BY id DESC") if err != nil { panic(err.Error()) } emp := Employee{} res := []Employee{} for selDB.Next() { var id int var name, city string err = selDB.Scan(&id, &name, &city) if err != nil { panic(err.Error()) } emp.Id = id emp.Name = name emp.City = city res = append(res, emp) } tmpl.ExecuteTemplate(w, "Index", res) defer db.Close() } func Show(w http.ResponseWriter, r *http.Request) { db := dbConn(r.Context()) nId := r.URL.Query().Get("id") selDB, err := db.Query("SELECT * FROM Employee WHERE id=$1", nId) if err != nil { panic(err.Error()) } emp := Employee{} for selDB.Next() { var id int var name, city string err = selDB.Scan(&id, &name, &city) if err != nil { panic(err.Error()) } emp.Id = id emp.Name = name emp.City = city } tmpl.ExecuteTemplate(w, "Show", emp) defer db.Close() } func New(w http.ResponseWriter, r *http.Request) { tmpl.ExecuteTemplate(w, "New", nil) } func Edit(w http.ResponseWriter, r *http.Request) { db := dbConn(r.Context()) nId := r.URL.Query().Get("id") selDB, err := db.Query("SELECT * FROM Employee WHERE id=$1", nId) if err != nil { panic(err.Error()) } emp := Employee{} for selDB.Next() { var id int var name, city string err = selDB.Scan(&id, &name, &city) if err != nil { panic(err.Error()) } emp.Id = id emp.Name = name emp.City = city } tmpl.ExecuteTemplate(w, "Edit", emp) defer db.Close() } func Insert(w http.ResponseWriter, r *http.Request) { db := dbConn(r.Context()) if r.Method == "POST" { name := r.FormValue("name") city := r.FormValue("city") insForm, err := db.Prepare("INSERT INTO Employee(name, city) VALUES($1,$2)") if err != nil { panic(err.Error()) } insForm.Exec(name, city) log.Println("INSERT: Name: " + name + " | City: " + city) } defer db.Close() http.Redirect(w, r, "/", 301) } func Update(w http.ResponseWriter, r *http.Request) { db := dbConn(r.Context()) if r.Method == "POST" { name := r.FormValue("name") city := r.FormValue("city") id := r.FormValue("uid") insForm, err := db.Prepare("UPDATE Employee SET name=$1, city=$2 WHERE id=$3") if err != nil { panic(err.Error()) } insForm.Exec(name, city, id) log.Println("UPDATE: Name: " + name + " | City: " + city) } defer db.Close() http.Redirect(w, r, "/", 301) } func Delete(w http.ResponseWriter, r *http.Request) { db := dbConn(r.Context()) emp := r.URL.Query().Get("id") delForm, err := db.Prepare("DELETE FROM Employee WHERE id=$1") if err != nil { panic(err.Error()) } delForm.Exec(emp) log.Println("DELETE") defer db.Close() http.Redirect(w, r, "/", 301) } func main() { log.Println("Server started on: http://localhost:8080") http.HandleFunc("/", Index) http.HandleFunc("/show", Show) http.HandleFunc("/new", New) http.HandleFunc("/edit", Edit) http.HandleFunc("/insert", Insert) http.HandleFunc("/update", Update) http.HandleFunc("/delete", Delete) http.ListenAndServe(":8080", nil) }