public ActionResult <dynamic> Get() { string authorization = Request.Headers["Authorization"]; string token = authorization.Substring("Bearer ".Length).Trim(); Int16 userId = _userService.GetUserId(token); view_user user = _contextForView.view_user.FirstOrDefault(x => x.id == userId); if (user == null) { throw new MindnoteException("你不是帳號的擁有者", HttpStatusCode.NotFound); } else { return(new { username = user.username, fullname = user.full_name, email = user.email, phone = user.phone, is_subscribed = user.is_subscribed, is_next_subscribe = user.is_next_subscribe }); } }
public ActionResult <dynamic> Unsubscribe() { string authorization = Request.Headers["Authorization"]; string token = authorization.Substring("Bearer ".Length).Trim(); Int32 userId = _userService.GetUserId(token); view_user user = _contextForView.view_user.FirstOrDefault(x => x.id == userId); if (!user.is_subscribed) { throw new MindnoteException("痾~你好像不是訂閱用戶", HttpStatusCode.ExpectationFailed); } transaction existedTransaction = _context.transaction.FirstOrDefault(x => x.id == user.transaction_id); if (!existedTransaction.is_next_subscribe) { throw new MindnoteException("已經取消訂閱囉~下一期我們將停止扣款"); } // transaction existedTransaction = new transaction { id = user.transaction_id ?? -1 }; // _context.Attach<transaction>(existedTransaction); existedTransaction.is_next_subscribe = false; _context.SaveChanges(); JSONResponse json = new JSONResponse(JSONResponseStatus.OK, new { }); return(json.toResponseObj()); }
public ActionResult <board> PostBoard([FromBody] dynamic body) { string authorization = Request.Headers["Authorization"]; string token = authorization.Substring("Bearer ".Length).Trim(); Int32 userId = _userService.GetUserId(token); view_user user = _contextForView.view_user.FirstOrDefault(x => x.id == userId); if (user.board_count >= 2 && !user.is_subscribed) { // throw new MindnoteException("Add board deny, because free account only have two boards. If you need to create new board, join us just pay $3 per month to subscribe our service.", HttpStatusCode.ExpectationFailed); throw new MindnoteException("因為免費使用者只有兩個分類可以使用,所以新增分類失敗,如果你需要更多的分類來整理筆記,一個月只需要 $ 99 元,就能使用無限多的分類,請點擊這則訊息進入到付款流程。", HttpStatusCode.ExpectationFailed); } board newBoard = new board { title = body.title, uniquename = body.uniquename, owner_id = userId }; _context.board.Add(newBoard); _context.SaveChanges(); return(_context.board.SingleOrDefault(rec => rec.id == newBoard.id)); }
public ActionResult <dynamic> PostImages([FromBody] dynamic requestBody) { string authorization = Request.Headers["Authorization"]; string token = authorization.Substring("Bearer ".Length).Trim(); Int16 userId = _userService.GetUserId(token); view_user user = _contextForView.view_user.FirstOrDefault(x => x.id == userId); if (user == null) { throw new MindnoteException("你不是帳號的擁有者", HttpStatusCode.NotFound); } GoogleCredential gc = GoogleCredential.FromJson(_GCSCredential); StorageClient client = StorageClient.Create(gc); for (int i = 0; i < requestBody.base64Files.Count; i++) { //check all file content type; string contentType = requestBody.base64Files[i].contentType.Value; if (!contentType.StartsWith("image/")) { throw new MindnoteException("你上傳了非圖片的檔案"); } } // post to gcs List <dynamic> result = new List <dynamic>(); for (int i = 0; i < requestBody.base64Files.Count; i++) { //check all file content type; string base64Data = requestBody.base64Files[i].data.Value; string contentType = requestBody.base64Files[i].contentType.Value; string clientSideFlagId = requestBody.base64Files[i].clientSideFlagId != null ? requestBody.base64Files[i].clientSideFlagId.Value : ""; decimal width = -1; if (requestBody.base64Files[i].width != null) { width = (decimal)requestBody.base64Files[i].width.Value; } decimal height = -1; if (requestBody.base64Files[i].height != null) { height = (decimal)requestBody.base64Files[i].height.Value; } int nodeId = -1; if (requestBody.base64Files[i].nodeId != null) { nodeId = (int)requestBody.base64Files[i].nodeId.Value; } string extensionFilename = ".jpg"; if (contentType == "image/jpg" || contentType == "image/jpeg") { extensionFilename = ".jpg"; } else if (contentType == "image/png") { extensionFilename = ".png"; } else if (contentType == "image/gif") { extensionFilename = ".gif"; } else if (contentType == "image/bmp") { extensionFilename = ".bmp"; } else { extensionFilename = contentType.Replace("image/", ""); } string id = Guid.NewGuid().ToString("N"); MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64Data)); Decimal size = stream.Length; if ((user.storage_usage + size) / 1024 / 1024 > 200) { throw new MindnoteException("上傳的圖片已經超過免費使用者的上限 (200 M),只要每月 99 元,就能享有 100 倍的上傳空間", HttpStatusCode.ExpectationFailed); } else if ((user.storage_usage + size) / 1024 / 1024 / 1024 > 20) { throw new MindnoteException("上傳的圖片已經超過付費使用者的上限 (20 G),請聯繫管理員 [email protected]", HttpStatusCode.InternalServerError); } Google.Apis.Storage.v1.Data.Object resultFromGCS = client.UploadObject(_GCSBucketName, id + extensionFilename, contentType, stream, new UploadObjectOptions() { UserProject = _GCPProjectId, }); JSONResponseStatus status = JSONResponseStatus.OK; if (resultFromGCS.Name == null) { status = JSONResponseStatus.FAILED; } dynamic resultItem = new ExpandoObject(); resultItem.status = Enum.GetName(typeof(JSONResponseStatus), status); resultItem.filename = resultFromGCS.Name; resultItem.clientSideFlagId = clientSideFlagId ?? ""; resultItem.nodeId = nodeId; resultItem.size = resultFromGCS.Size; resultItem.width = width; resultItem.height = height; result.Add(resultItem); } // check gcs result and save local db for (int i = 0; i < result.Count; i++) { if (result[i].status == Enum.GetName(typeof(JSONResponseStatus), JSONResponseStatus.OK)) { image image = new image { owner_id = userId, filename = result[i].filename, size = result[i].size, }; if (result[i].width != -1) { image.width = result[i].width; } if (result[i].height != -1) { image.height = result[i].height; } if (result[i].nodeId != -1) { image.node_id = result[i].nodeId; } result[i].imageContext = image; _context.image.Add(image); } } _context.SaveChanges(); return(result); }
async public Task <dynamic> Checkout([FromBody] dynamic requestBody) { // initialize local transaction data string authorization = Request.Headers["Authorization"]; string token = authorization.Substring("Bearer ".Length).Trim(); Int16 userId = _userService.GetUserId(token); view_user view_user = _contextForView.view_user.FirstOrDefault(x => x.id == userId); if (view_user.is_subscribed) { throw new MindnoteException("你已經是我們的訂閱用戶", HttpStatusCode.ExpectationFailed); } transaction newTransaction = null; try { if (requestBody.prime != null) { newTransaction = new transaction { method = Enum.GetName(typeof(TransactionMethod), TransactionMethod.TAP_PAY), owner_id = userId, status = Enum.GetName(typeof(TransactionStatus), TransactionStatus.PENDING), phone = requestBody.phone, card_holder = requestBody.card_holder, email = requestBody.email, amount = 99 }; _context.transaction.Add(newTransaction); _context.SaveChanges(); } } catch (System.Exception ex) { throw new MindnoteException("交易失敗:" + ex.Message, HttpStatusCode.InternalServerError); } // send transaction data to tap pay HttpClient httpClient = new HttpClient(); var postBody = new { prime = requestBody.prime, partner_key = _tapPayPartnerKey, merchant_id = "hahow_CTBC", details = "Mindnote Subscription", amount = 99, cardholder = new { phone_number = requestBody.phone, name = requestBody.card_holder, email = requestBody.email }, remember = true }; httpClient.DefaultRequestHeaders.Add("x-api-key", _tapPayPartnerKey); StringContent httpContent = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(postBody), Encoding.UTF8, "application/json"); HttpResponseMessage response = await httpClient.PostAsync(_tapPayEndpoint, httpContent); string resultFromTapPay = await response.Content.ReadAsStringAsync(); dynamic resultObjFromTapPay = Newtonsoft.Json.JsonConvert.DeserializeObject(resultFromTapPay); // update local transaction status user user = _context.user.FirstOrDefault(x => x.id == userId); JSONResponse result; if ((int)response.StatusCode == StatusCodes.Status200OK) { newTransaction.raw_data = resultFromTapPay; if (resultObjFromTapPay.status == 0) { newTransaction.status = Enum.GetName(typeof(TransactionStatus), TransactionStatus.PAID); } newTransaction.paid_at = DateTime.Now; user.phone = requestBody.phone; user.full_name = requestBody.card_holder; user.email = requestBody.email; _context.SaveChanges(); if (resultObjFromTapPay.status != 0) { throw new MindnoteException(resultObjFromTapPay.msg.Value, HttpStatusCode.InternalServerError); } result = new JSONResponse(JSONResponseStatus.OK, new { data = resultFromTapPay }); return(result.toResponseObj()); } else { result = new JSONResponse(JSONResponseStatus.FAILED, new { data = response }); return(result.toResponseObj()); } }