github.com/Ptt-official-app/go-bbs@v0.12.0/serverlet/main.go (about)

     1  package main
     2  
     3  import (
     4  	"github.com/Ptt-official-app/go-bbs"
     5  	_ "github.com/Ptt-official-app/go-bbs/pttbbs"
     6  
     7  	"encoding/json"
     8  	"fmt"
     9  	"log"
    10  	"net/http"
    11  	"strings"
    12  )
    13  
    14  var userRecs []bbs.UserRecord
    15  var boardHeader []bbs.BoardRecord
    16  
    17  var bbsDB *bbs.DB
    18  
    19  func main() {
    20  	fmt.Println("server start")
    21  	var err error
    22  	bbsDB, err = bbs.Open("pttbbs", "file://../home/bbs")
    23  	if err != nil {
    24  		log.Printf("open bbs error: %v", err)
    25  		return
    26  	}
    27  
    28  	loadPasswdsFile()
    29  	loadBoardFile()
    30  
    31  	r := http.NewServeMux()
    32  	r.HandleFunc("/v1/token", routeToken)
    33  	r.HandleFunc("/v1/boards", routeBoards)
    34  	r.HandleFunc("/v1/classes/", routeClasses)
    35  	r.HandleFunc("/v1/users/", routeUsers)
    36  
    37  	http.ListenAndServe(":8083", r)
    38  }
    39  
    40  func loadPasswdsFile() {
    41  	var err error
    42  	userRecs, err = bbsDB.ReadUserRecords()
    43  	if err != nil {
    44  		log.Println("get user rec error:", err)
    45  		return
    46  	}
    47  	log.Println(userRecs)
    48  }
    49  
    50  func loadBoardFile() {
    51  	var err error
    52  	boardHeader, err = bbsDB.ReadBoardRecords()
    53  	if err != nil {
    54  		log.Println("get board header error:", err)
    55  		return
    56  	}
    57  	log.Println(boardHeader)
    58  }
    59  
    60  func routeClass(w http.ResponseWriter, r *http.Request) {
    61  	if r.Method == "GET" {
    62  		getClass(w, r)
    63  		return
    64  	}
    65  
    66  }
    67  
    68  func getClass(w http.ResponseWriter, r *http.Request) {
    69  
    70  	seg := strings.Split(r.URL.Path, "/")
    71  
    72  	classID := "0"
    73  	if len(seg) > 2 {
    74  		classID = seg[3]
    75  	}
    76  
    77  	log.Println("user get class:", classID)
    78  
    79  	list := []interface{}{}
    80  
    81  	c := map[string]interface{}{
    82  		"id":             1,
    83  		"type":           "class",
    84  		"title":          "title",
    85  		"number_of_user": 3,
    86  		"moderators": []string{
    87  			"SYSOP",
    88  			"pichu",
    89  		},
    90  	}
    91  	list = append(list, c)
    92  
    93  	m := map[string]interface{}{
    94  		"data": list,
    95  	}
    96  	b, _ := json.MarshalIndent(m, "", "  ")
    97  
    98  	w.Write(b)
    99  
   100  }