Skip to content

Commit

Permalink
Moving some event to private api #41 ( cdn service )
Browse files Browse the repository at this point in the history
- untested
- only comment old code
  • Loading branch information
code-ga committed Dec 14, 2023
1 parent 7e98a65 commit 5871078
Show file tree
Hide file tree
Showing 8 changed files with 304 additions and 178 deletions.
81 changes: 79 additions & 2 deletions server/cdn-service/src/route/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::types::RedisClient;
use crate::types::{RedisClient, TokenStorageTableNode};
use crate::upload_images;
use crate::util::{broadcast_get_image, send_uploaded_message};
use crate::util::{broadcast_get_image, gen_token, get_redis_key, send_uploaded_message};
use hyper::StatusCode;
use redis::JsonAsyncCommands;
use salvo::logging::Logger;
Expand All @@ -18,13 +18,90 @@ pub fn route(redis: RedisClient) -> salvo::Router {
redis: redis.clone(),
}));

router = router.push(Router::with_path("/private/gen_token").post(GenToken {
redis: redis.clone(),
}));

return router;
}
#[handler]
async fn hello_world() -> &'static str {
"Hello world"
}

struct GenToken {
pub redis: RedisClient,
}

#[salvo::async_trait]
impl salvo::Handler for GenToken {
async fn handle(
&self,
req: &mut Request,
_depot: &mut Depot,
res: &mut Response,
_ctrl: &mut salvo::FlowCtrl,
) {
let body = req.parse_body::<serde_json::Value>().await.unwrap();
let mut sender_data = None;
if let serde_json::Value::Array(a) = body {
let mut tokens = vec![];
for v in a {
let (id, data, emit_to, event_name) = (
v.get("id").unwrap().as_str().unwrap(),
v.get("data").unwrap(),
v.get("emit_to").unwrap().as_str().unwrap(),
v.get("event_name").unwrap().as_str().unwrap(),
);
let token = gen_token(id.to_string());

self.redis
.get_tokio_connection()
.await
.unwrap()
.json_set::<String, String, TokenStorageTableNode, bool>(
get_redis_key(token.to_string()),
"$".to_string(),
&TokenStorageTableNode {
data: data.clone(),
emit_to: emit_to.to_string(),
event_name: event_name.to_string(),
},
);
tokens.push(event_name.to_string());
tokens.push(token.clone());
}
sender_data = Some(serde_json::json! {{
"token":tokens
}});
} else if let serde_json::Value::Object(o) = body {
let (id, data, emit_to, event_name) = (
o.get("id").unwrap().as_str().unwrap(),
o.get("data").unwrap(),
o.get("emit_to").unwrap().as_str().unwrap(),
o.get("event_name").unwrap().as_str().unwrap(),
);
let token = gen_token(id.to_string());
self.redis
.get_tokio_connection()
.await
.unwrap()
.json_set::<String, String, TokenStorageTableNode, bool>(
get_redis_key(token.to_string()),
"$".to_string(),
&TokenStorageTableNode {
data: data.clone(),
emit_to: emit_to.to_string(),
event_name: event_name.to_string(),
},
);
sender_data = Some(serde_json::json! {{"token":token.clone()}});
}
res.render(Json(sender_data.unwrap()));
}

}

struct GetImageData {
pub redis: RedisClient,
}
Expand Down
17 changes: 1 addition & 16 deletions server/cdn-service/src/ws/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,7 @@ async fn handle_gen_token(json_data: SenderData, redis: RedisClient) {
);
let token = gen_token(id.to_string());

// token_storage.lock().unwrap().insert(
// token.to_string(),
// TokenStorageTableNode {
// data: data.clone(),
// emit_to: emit_to.to_string(),
// event_name: event_name.to_string(),
// },
// );

redis
.get_tokio_connection()
.await
Expand Down Expand Up @@ -123,14 +116,6 @@ async fn handle_gen_token(json_data: SenderData, redis: RedisClient) {
o.get("event_name").unwrap().as_str().unwrap(),
);
let token = gen_token(id.to_string());
// token_storage.lock().unwrap().insert(
// token.to_string(),
// TokenStorageTableNode {
// data: data.clone(),
// emit_to: emit_to.to_string(),
// event_name: event_name.to_string(),
// },
// );
redis
.get_tokio_connection()
.await
Expand Down
2 changes: 0 additions & 2 deletions server/comic/LocalTypes/ws.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,9 @@ type ServiceReturnData[T any, ht any] struct {
}

type GetUploadTokenReturn struct {
BaseReturn
Token string `json:"token"`
}
type GetUploadTokensReturn struct {
BaseReturn
Token []string `json:"token"`
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,65 +162,33 @@ func (r *mutationResolver) AddImageToChap(ctx context.Context, chapID string) (*
}

requestId := uuid.New().String()
payload := struct {
ID string `json:"id"`
SaveData LocalTypes.UploadedChapImagesSocketPayload `json:"data"`
EmitTo string `json:"emit_to"`
EventName string `json:"event_name"`
}{
payload := util.GenSingleUploadTokenPayload[LocalTypes.UploadedChapImagesSocketPayload]{
ID: requestId,
SaveData: LocalTypes.UploadedChapImagesSocketPayload{
ChapId: chapID,
},
EmitTo: "comic",
EventName: "SocketAddImagesToChap",
}
requestData := LocalTypes.ServiceRequest{
Url: "upload_token_registry/genToken",
Header: nil,
Payload: &payload,
From: "comic/addImages",
Type: "message",
ID: requestId,
}
// r.Ws.WriteMessage(websocket.TextMessage, requestDataBytes)
data, err := util.ServiceSender[LocalTypes.GetUploadTokenReturn, *any](r.Redis, requestData, true)
if err != nil {
return nil, err
}
if data.Error != nil {
return nil, &gqlerror.Error{
Message: *data.Error,
}
}
return &data.Payload.Token, nil

// for {
// _, message, err := r.Ws.ReadMessage()
// if err != nil {
// return nil, err
// }
// var data LocalTypes.WsReturnData[LocalTypes.GetUploadTokenReturn, *any]
// err = json.Unmarshal(message, &data)
// if err != nil {
// return nil, err
// }
// if data.Type == "rep" {
// if data.ID == requestId {
// if data.Error != nil {
// return nil, &gqlerror.Error{
// Message: *data.Error,
// }
// }
// return &data.Payload.Token, nil

// // return nil, &gqlerror.Error{
// // Message: "500 server error",
// // }

// }
// requestData := LocalTypes.ServiceRequest{
// Url: "upload_token_registry/genToken",
// Header: nil,
// Payload: &payload,
// From: "comic/addImages",
// Type: "message",
// ID: requestId,
// }
// data, err := util.ServiceSender[LocalTypes.GetUploadTokenReturn, *any](r.Redis, requestData, true)
// if err != nil {
// return nil, err
// }
// if data.Error != nil {
// return nil, &gqlerror.Error{
// Message: *data.Error,
// }
// }
// return &data.Payload.Token, nil
return util.GenSingleUploadToken(payload)
}

// UpdateChap is the resolver for the UpdateChap field.
Expand Down Expand Up @@ -319,7 +287,7 @@ func (r *mutationResolver) DeleteChapImage(ctx context.Context, chapID string, i
// return nil, err
// }
// r.Ws.WriteMessage(websocket.TextMessage, chapObject)
util.ServiceSender[any,any](r.Redis, chapObjectData, false)
util.ServiceSender[any, any](r.Redis, chapObjectData, false)

for _, v := range imageID {
imageIndex := slices.IndexFunc(comicChapDoc.Images, func(ir *model.ImageResult) bool {
Expand Down
104 changes: 61 additions & 43 deletions server/comic/graphql/resolver/comic.schema.resolvers.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,45 +97,52 @@ func (r *mutationResolver) CreateComic(ctx context.Context, input model.CreateCo
UploadToken: nil,
}, nil
}
requestId := uuid.New().String()
type GenUploadTokenPayload struct {
ID string `json:"id"`
SaveData LocalTypes.UploadComicThumbnailAndBackgroundPayload `json:"data"`
EmitTo string `json:"emit_to"`
EventName string `json:"event_name"`
}
payload := []GenUploadTokenPayload{}
// type GenUploadTokenPayload struct {
// ID string `json:"id"`
// SaveData LocalTypes.UploadComicThumbnailAndBackgroundPayload `json:"data"`
// EmitTo string `json:"emit_to"`
// EventName string `json:"event_name"`
// }
payload := []util.GenSingleUploadTokenPayload[LocalTypes.UploadComicThumbnailAndBackgroundPayload]{}
for _, v := range requestTokensList {
payload = append(payload, GenUploadTokenPayload{
payload = append(payload, util.GenSingleUploadTokenPayload[LocalTypes.UploadComicThumbnailAndBackgroundPayload]{
ID: uuid.NewString(),
SaveData: LocalTypes.UploadComicThumbnailAndBackgroundPayload{
ComicId: comicDoc.ID,
},
EmitTo: "comic",
EventName: fmt.Sprintf("SocketChangeComic%s", v),
})

}
requestData := LocalTypes.ServiceRequest{
Url: "upload_token_registry/genToken",
Header: nil,
Payload: &payload,
From: "comic/addImages",
Type: "message",
ID: requestId,
}
data, err := util.ServiceSender[LocalTypes.GetUploadTokensReturn, *any](r.Redis, requestData, true)
// requestData := LocalTypes.ServiceRequest{
// Url: "upload_token_registry/genToken",
// Header: nil,
// Payload: &payload,
// From: "comic/addImages",
// Type: "message",
// ID: requestId,
// }
// data, err := util.ServiceSender[LocalTypes.GetUploadTokensReturn, *any](r.Redis, requestData, true)
// if err != nil {
// return nil, err
// }
// if data.Error != nil {
// return nil, &gqlerror.Error{
// Message: *data.Error,
// }
// }
uploadTokens, err := util.GenMultiUploadToken(payload)
if err != nil {
return nil, err
}
if data.Error != nil {
if uploadTokens == nil {
return nil, &gqlerror.Error{
Message: *data.Error,
Message: "500 Internal Server Error",
}
}
return &model.CreateComicResponse{
Comic: comicDoc,
UploadToken: data.Payload.Token,
UploadToken: *uploadTokens,
}, nil
// requestDataBytes, err := json.Marshal(requestData)
// if err != nil {
Expand Down Expand Up @@ -234,16 +241,16 @@ func (r *mutationResolver) UpdateComic(ctx context.Context, comicID string, inpu
UploadToken: nil,
}, nil
}
requestId := uuid.New().String()
type GenUploadTokenPayload struct {
ID string `json:"id"`
SaveData LocalTypes.UploadComicThumbnailAndBackgroundPayload `json:"data"`
EmitTo string `json:"emit_to"`
EventName string `json:"event_name"`
}
payload := []GenUploadTokenPayload{}
// requestId := uuid.New().String()
// type GenUploadTokenPayload struct {
// ID string `json:"id"`
// SaveData LocalTypes.UploadComicThumbnailAndBackgroundPayload `json:"data"`
// EmitTo string `json:"emit_to"`
// EventName string `json:"event_name"`
// }
payload := []util.GenSingleUploadTokenPayload[LocalTypes.UploadComicThumbnailAndBackgroundPayload]{}
for _, v := range requestTokensList {
payload = append(payload, GenUploadTokenPayload{
payload = append(payload, util.GenSingleUploadTokenPayload[LocalTypes.UploadComicThumbnailAndBackgroundPayload]{
ID: uuid.NewString(),
SaveData: LocalTypes.UploadComicThumbnailAndBackgroundPayload{
ComicId: comicDoc.ID,
Expand All @@ -253,26 +260,37 @@ func (r *mutationResolver) UpdateComic(ctx context.Context, comicID string, inpu
})

}
requestData := LocalTypes.ServiceRequest{
Url: "upload_token_registry/genToken",
Header: nil,
Payload: &payload,
From: "comic/updateComic",
Type: "message",
ID: requestId,
}
data, err := util.ServiceSender[LocalTypes.GetUploadTokensReturn, *any](r.Redis, requestData, true)
// requestData := LocalTypes.ServiceRequest{
// Url: "upload_token_registry/genToken",
// Header: nil,
// Payload: &payload,
// From: "comic/updateComic",
// Type: "message",
// ID: requestId,
// }
// data, err := util.ServiceSender[LocalTypes.GetUploadTokensReturn, *any](r.Redis, requestData, true)
// if err != nil {
// return nil, err
// }
// if data.Error != nil {
// return nil, &gqlerror.Error{
// Message: *data.Error,
// }
// }

uploadTokens, err := util.GenMultiUploadToken[LocalTypes.UploadComicThumbnailAndBackgroundPayload](payload)
if err != nil {
return nil, err
}
if data.Error != nil {
if uploadTokens == nil {
return nil, &gqlerror.Error{
Message: *data.Error,
Message: "500 server error",
}
}

return &model.UploadComicResponse{
Comic: comicDoc,
UploadToken: data.Payload.Token,
UploadToken: *uploadTokens,
}, nil
// requestDataBytes, err := json.Marshal(requestData)
// if err != nil {
Expand Down
Loading

0 comments on commit 5871078

Please sign in to comment.