Toggle navigation
Toggle navigation
This project
Loading...
Sign in
김명현
/
Classroom-Reservation
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
freckie
2020-12-19 04:27:55 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0407b64de74842c39658cbcd9be1db1850f1a158
0407b64d
1 parent
0e00e70c
Update: sheets control
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
80 additions
and
44 deletions
api/config.go
api/endpoints/endpoints.go
api/endpoints/go.mod
api/endpoints/go.sum
api/endpoints/reservation.go
api/main.go
api/utils/sheets.go
api/config.go
View file @
0407b64
...
...
@@ -6,10 +6,15 @@ import (
)
type
Config
struct
{
Google
ConfigGoogle
`json:"google"`
Server
ConfigServer
`json:"server"`
Database
ConfigDatabase
`json:"database"`
}
type
ConfigGoogle
struct
{
CredentialsPath
string
`json:"credentials_path"`
}
type
ConfigServer
struct
{
LocalMode
bool
`json:"local_mode"`
Host
string
`json:"host"`
...
...
api/endpoints/endpoints.go
View file @
0407b64
package
endpoints
import
(
"classroom/utils"
"database/sql"
)
type
Endpoints
struct
{
DB
*
sql
.
DB
Sheets
*
utils
.
SheetsService
}
...
...
api/endpoints/go.mod
View file @
0407b64
...
...
@@ -5,10 +5,12 @@ go 1.14
require (
classroom/functions v0.0.0
classroom/models v0.0.0
classroom/utils v0.0.0
github.com/julienschmidt/httprouter v1.3.0
)
replace (
classroom/functions v0.0.0 => ../functions
classroom/models v0.0.0 => ../models
classroom/utils v0.0.0 => ../utils
)
...
...
api/endpoints/go.sum
View file @
0407b64
This diff is collapsed. Click to expand it.
api/endpoints/reservation.go
View file @
0407b64
...
...
@@ -3,11 +3,13 @@ package endpoints
import
(
"classroom/functions"
"classroom/models"
"classroom/utils"
"database/sql"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
"strings"
"github.com/julienschmidt/httprouter"
...
...
@@ -29,46 +31,20 @@ func (e *Endpoints) ReservationPost(w http.ResponseWriter, r *http.Request, ps h
sheetID
:=
ps
.
ByName
(
"sheet_id"
)
// Check Permission
var
_
count
int64
var
_
timetableName
string
timetable
:=
fmt
.
Sprintf
(
"%s,%s"
,
fileID
,
sheetID
)
row
:=
e
.
DB
.
QueryRow
(
`
SELECT
count(timetable_id)
FROM
allowlist
SELECT
name
FROM
timetables
WHERE timetable_id=?;
`
,
timetable
)
if
err
:=
row
.
Scan
(
&
_
count
);
err
=
=
nil
{
if
_count
<=
0
{
if
err
:=
row
.
Scan
(
&
_
timetableName
);
err
!
=
nil
{
if
err
==
sql
.
ErrNoRows
{
functions
.
ResponseError
(
w
,
404
,
"존재하지 않는 timetable."
)
return
}
}
// row = e.DB.QueryRow(`
// SELECT (
// SELECT count(a.timetable_id)
// FROM allowlist AS a, users AS u
// WHERE a.user_id=u.id
// AND a.timetable_id=?
// AND u.email=?
// ) AS count,
// (
// SELECT is_super FROM users WHERE email=?
// ) AS is_super;
// `, timetable, email, email)
// if err := row.Scan(&_count, &_isSuper); err == nil {
// if _isSuper != 1 {
// functions.ResponseError(w, 403, "관리자만 접근할 수 있는 기능입니다.")
// return
// }
// if _count <= 0 {
// functions.ResponseError(w, 403, "timetable에 접근할 권한이 부족합니다.")
// return
// }
// } else {
// functions.ResponseError(w, 500, "예기치 못한 에러 : "+err.Error())
// return
// }
// Parse Request Data
type
reqDataStruct
struct
{
Column
*
string
`json:"column"`
...
...
@@ -153,6 +129,26 @@ loopCheckingValidation:
return
}
// Merge and write value on cells
cellValue
:=
fmt
.
Sprintf
(
"%s
\n
%s"
,
*
(
reqData
.
Lecture
),
*
(
reqData
.
Professor
))
sheetIDint
,
_
:=
strconv
.
Atoi
(
sheetID
)
sr
:=
utils
.
NewSheetsRequest
(
fileID
,
_timetableName
,
int64
(
sheetIDint
),
*
(
reqData
.
Column
),
int64
(
*
(
reqData
.
Start
)),
int64
(
*
(
reqData
.
End
)),
cellValue
,
)
fmt
.
Println
(
sr
)
err
=
e
.
Sheets
.
WriteAndMerge
(
sr
)
if
err
!=
nil
{
functions
.
ResponseError
(
w
,
500
,
"예기치 못한 에러 : "
+
err
.
Error
())
return
}
// Transaction Commit
err
=
tx
.
Commit
()
if
err
!=
nil
{
functions
.
ResponseError
(
w
,
500
,
"예기치 못한 에러 : "
+
err
.
Error
())
...
...
@@ -161,7 +157,7 @@ loopCheckingValidation:
resp
.
TransactionID
,
err
=
res
.
LastInsertId
()
if
err
!=
nil
{
functions
.
ResponseError
(
w
,
500
,
err
.
Error
())
functions
.
ResponseError
(
w
,
500
,
"예기치 못한 에러 : "
+
err
.
Error
())
return
}
...
...
@@ -192,15 +188,16 @@ func (e *Endpoints) ReservationDelete(w http.ResponseWriter, r *http.Request, ps
reservationID
:=
ps
.
ByName
(
"reservation_id"
)
// Check Permission
var
_count
,
isSuper
int64
var
isSuper
int64
var
_timetableName
string
timetable
:=
fmt
.
Sprintf
(
"%s,%s"
,
fileID
,
sheetID
)
row
:=
e
.
DB
.
QueryRow
(
`
SELECT
count(timetable_id)
FROM
allowlist
SELECT
name
FROM
timetables
WHERE timetable_id=?;
`
,
timetable
)
if
err
:=
row
.
Scan
(
&
_
count
);
err
=
=
nil
{
if
_count
<=
0
{
if
err
:=
row
.
Scan
(
&
_
timetableName
);
err
!
=
nil
{
if
err
==
sql
.
ErrNoRows
{
functions
.
ResponseError
(
w
,
404
,
"존재하지 않는 timetable."
)
return
}
...
...
@@ -227,15 +224,15 @@ func (e *Endpoints) ReservationDelete(w http.ResponseWriter, r *http.Request, ps
defer
tx
.
Rollback
()
// Check Transaction Permission
var
_transactionType
int64
var
_email
string
var
_transactionType
,
_cellStart
,
_cellEnd
int64
var
_email
,
_cellColumn
string
row
=
tx
.
QueryRow
(
`
SELECT u.email, t.transaction_type
SELECT u.email, t.transaction_type
, t.cell_column, t.cell_start, t.cell_end
FROM transactions AS t, users AS u
WHERE t.user_id=u.id
AND t.transaction_id=?;
`
,
reservationID
)
err
=
row
.
Scan
(
&
_email
,
&
_transactionType
)
err
=
row
.
Scan
(
&
_email
,
&
_transactionType
,
&
_cellColumn
,
&
_cellStart
,
&
_cellEnd
)
if
err
!=
nil
{
if
err
==
sql
.
ErrNoRows
{
functions
.
ResponseError
(
w
,
404
,
"존재하지 않는 예약"
)
...
...
@@ -268,6 +265,24 @@ func (e *Endpoints) ReservationDelete(w http.ResponseWriter, r *http.Request, ps
return
}
// Unmerge and clear value on cells
sheetIDint
,
_
:=
strconv
.
Atoi
(
sheetID
)
sr
:=
utils
.
NewSheetsRequest
(
fileID
,
_timetableName
,
int64
(
sheetIDint
),
_cellColumn
,
_cellStart
,
_cellEnd
,
""
,
)
err
=
e
.
Sheets
.
RemoveValue
(
sr
)
if
err
!=
nil
{
functions
.
ResponseError
(
w
,
500
,
"예기치 못한 에러 : "
+
err
.
Error
())
return
}
// Transaction Commit
err
=
tx
.
Commit
()
if
err
!=
nil
{
functions
.
ResponseError
(
w
,
500
,
"예기치 못한 에러 : "
+
err
.
Error
())
...
...
api/main.go
View file @
0407b64
...
...
@@ -11,6 +11,7 @@ import (
"classroom/endpoints"
"classroom/functions"
"classroom/utils"
_
"github.com/go-sql-driver/mysql"
"github.com/julienschmidt/httprouter"
...
...
@@ -56,7 +57,17 @@ func main() {
log
.
Fatal
(
err
)
}
defer
db
.
Close
()
ep
:=
endpoints
.
Endpoints
{
DB
:
db
}
// Google API Setting
sheets
,
err
:=
utils
.
NewSheetsService
(
cfg
.
Google
.
CredentialsPath
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
ep
:=
endpoints
.
Endpoints
{
DB
:
db
,
Sheets
:
sheets
,
}
// Router Setting
router
:=
httprouter
.
New
()
...
...
api/utils/sheets.go
View file @
0407b64
...
...
@@ -111,6 +111,7 @@ func (s *SheetsService) RemoveValue(sr SheetsRequest) error {
type
SheetsRequest
struct
{
SpreadSheetID
string
SheetName
string
SheetID
int64
Range
*
sheets
.
GridRange
RangeStr
string
...
...
@@ -118,7 +119,7 @@ type SheetsRequest struct {
}
func
NewSheetsRequest
(
spreadSheetID
string
,
sheetID
int64
,
column
string
,
start
,
end
int64
,
value
string
)
SheetsRequest
{
spreadSheetID
,
sheetName
string
,
sheetID
int64
,
column
string
,
start
,
end
int64
,
value
string
)
SheetsRequest
{
colIndex
:=
A1ToInt
(
column
)
req
:=
SheetsRequest
{}
...
...
@@ -131,7 +132,7 @@ func NewSheetsRequest(
StartRowIndex
:
start
-
1
,
EndRowIndex
:
end
,
}
req
.
RangeStr
=
fmt
.
Sprintf
(
"%s
%d:%s%d"
,
column
,
start
,
column
,
end
)
req
.
RangeStr
=
fmt
.
Sprintf
(
"%s
!%s%d:%s%d"
,
sheetName
,
column
,
start
,
column
,
end
)
req
.
Value
=
value
return
req
}
...
...
Please
register
or
login
to post a comment