github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/api4/track_record.go (about)

     1  package api4
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/masterhung0112/hk_server/v5/app"
     7  	"github.com/masterhung0112/hk_server/v5/audit"
     8  	"github.com/masterhung0112/hk_server/v5/model"
     9  )
    10  
    11  func (api *API) InitTrackRecord() {
    12  	api.BaseRoutes.TrackRecords.Handle("", api.ApiSessionRequired(createTrackRecord)).Methods("POST")
    13  	api.BaseRoutes.TrackRecord.Handle("", api.ApiSessionRequired(getTrackRecord)).Methods("GET")
    14  	api.BaseRoutes.TrackRecord.Handle("/trackpoint", api.ApiSessionRequired(createNewTrackPointForTrackRecord)).Methods("POST")
    15  	api.BaseRoutes.TrackRecord.Handle("/start", api.ApiSessionRequired(startTrackRecord)).Methods("POST")
    16  	api.BaseRoutes.TrackRecord.Handle("/end", api.ApiSessionRequired(endTrackRecord)).Methods("POST")
    17  }
    18  
    19  func createTrackRecord(c *Context, w http.ResponseWriter, r *http.Request) {
    20  	trackRecord := model.TrackRecordFromJson(r.Body)
    21  	if trackRecord == nil {
    22  		c.SetInvalidParam("trackRecord")
    23  		return
    24  	}
    25  
    26  	auditRec := c.MakeAuditRecord("createTrackRecord", audit.Fail)
    27  	defer c.LogAuditRecWithLevel(auditRec, app.LevelContent)
    28  	auditRec.AddMeta("trackRecord", trackRecord)
    29  
    30  	rTrackRecord, err := c.App.CreateTrackRecord(trackRecord)
    31  	if err != nil {
    32  		c.Err = err
    33  		return
    34  	}
    35  	auditRec.Success()
    36  	auditRec.AddMeta("trackRecord", rTrackRecord)
    37  	w.WriteHeader(http.StatusCreated)
    38  	w.Write([]byte(rTrackRecord.ToJson()))
    39  }
    40  
    41  func getTrackRecord(c *Context, w http.ResponseWriter, r *http.Request) {
    42  	c.RequireTrackRecordId()
    43  	if c.Err != nil {
    44  		return
    45  	}
    46  
    47  	trackRecord, err := c.App.GetTrackRecord(c.Params.TrackRecordId)
    48  	if err != nil {
    49  		c.Err = err
    50  		return
    51  	}
    52  
    53  	w.Write([]byte(trackRecord.ToJson()))
    54  }
    55  
    56  func createNewTrackPointForTrackRecord(c *Context, w http.ResponseWriter, r *http.Request) {
    57  	c.RequireTrackRecordId()
    58  	if c.Err != nil {
    59  		return
    60  	}
    61  
    62  	trackPoint := model.TrackPointFromJson(r.Body)
    63  	if trackPoint == nil {
    64  		c.SetInvalidParam("trackPoint")
    65  		return
    66  	}
    67  
    68  	rTrackPoint, err := c.App.CreateTrackPointForTrackRecord(trackPoint, c.Params.TrackRecordId)
    69  	if err != nil {
    70  		c.Err = err
    71  		return
    72  	}
    73  
    74  	w.WriteHeader(http.StatusCreated)
    75  	w.Write([]byte(rTrackPoint.ToJson()))
    76  }
    77  
    78  func startTrackRecord(c *Context, w http.ResponseWriter, r *http.Request) {
    79  	c.RequireTrackRecordId()
    80  	if c.Err != nil {
    81  		return
    82  	}
    83  
    84  	trackRecord, err := c.App.StartTrackRecord(c.Params.TrackRecordId)
    85  	if err != nil {
    86  		c.Err = err
    87  		return
    88  	}
    89  
    90  	w.Write([]byte(trackRecord.ToJson()))
    91  }
    92  
    93  func endTrackRecord(c *Context, w http.ResponseWriter, r *http.Request) {
    94  	c.RequireTrackRecordId()
    95  	if c.Err != nil {
    96  		return
    97  	}
    98  
    99  	trackRecord, err := c.App.EndTrackRecord(c.Params.TrackRecordId)
   100  	if err != nil {
   101  		c.Err = err
   102  		return
   103  	}
   104  
   105  	w.Write([]byte(trackRecord.ToJson()))
   106  }