Files
threetwo-docs/assets/js/5281b7a2.ae829f25.js

1 line
4.8 KiB
JavaScript

"use strict";(self.webpackChunkthreetwo_docs=self.webpackChunkthreetwo_docs||[]).push([[927],{3905:function(e,t,r){r.d(t,{Zo:function(){return u},kt:function(){return d}});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),m=s(r),d=o,h=m["".concat(l,".").concat(d)]||m[d]||p[d]||i;return r?n.createElement(h,a(a({ref:t},u),{},{components:r})):n.createElement(h,a({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var s=2;s<i;s++)a[s]=r[s];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1527:function(e,t,r){r.r(t),r.d(t,{assets:function(){return l},contentTitle:function(){return a},default:function(){return p},frontMatter:function(){return i},metadata:function(){return c},toc:function(){return s}});var n=r(3117),o=(r(7294),r(3905));const i={sidebar_position:4,id:"architecture",title:"Technical Architecture"},a=void 0,c={unversionedId:"architecture",id:"architecture",title:"Technical Architecture",description:"High-level Architecture",source:"@site/docs/architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/threetwo-docs/docs/architecture",draft:!1,editUrl:"https://github.com/facebook/docusaurus/edit/main/website/docs/architecture.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,id:"architecture",title:"Technical Architecture"},sidebar:"tutorialSidebar",previous:{title:"Resources & Help",permalink:"/threetwo-docs/docs/resources"}},l={},s=[{value:"High-level Architecture",id:"high-level-architecture",level:3},{value:"Technical stack",id:"technical-stack",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h3",{id:"high-level-architecture"},"High-level Architecture"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ThreeTwo!"),", the app is built upon the microservice architecture. The UI is a standalone ",(0,o.kt)("inlineCode",{parentName:"p"},"node.js")," app and the rest of the logic is broken into microservices."),(0,o.kt)("p",null,"The microservices deal with: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Library functions (model orchestration, CRUD ops on comics, metadata)"),(0,o.kt)("li",{parentName:"ol"},"Comic Vine (scraping issues, volumes and more)"),(0,o.kt)("li",{parentName:"ol"},"Grand Comics Database (scraping, aggregations and more)"),(0,o.kt)("li",{parentName:"ol"},"Helpers (image transformation, file-system ops, compression/uncompression)")),(0,o.kt)("h3",{id:"technical-stack"},"Technical stack"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ThreeTwo!")," is written in ",(0,o.kt)("inlineCode",{parentName:"p"},"TypeScript")," from UI to the services layer."),(0,o.kt)("p",null,"The technologies used are: "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"React"),(0,o.kt)("li",{parentName:"ol"},"Redux"),(0,o.kt)("li",{parentName:"ol"},"moleculer"),(0,o.kt)("li",{parentName:"ol"},"RabbitMQ"),(0,o.kt)("li",{parentName:"ol"},"socket.io"),(0,o.kt)("li",{parentName:"ol"},"node.js"),(0,o.kt)("li",{parentName:"ol"},"Express"),(0,o.kt)("li",{parentName:"ol"},"MongoDB"),(0,o.kt)("li",{parentName:"ol"},"mongoose")))}p.isMDXComponent=!0}}]);