GithubHelp home page GithubHelp logo

swpp2019-team12's People

Contributors

bgchun avatar dependabot[bot] avatar imchaemin avatar nsyt0607 avatar tyj9327 avatar yejiahn avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

imchaemin

swpp2019-team12's Issues

Git Commit

깃 커밋 작성 규칙

구조

[TYPE] 제목

    - 내용

    - 내용

    - 내용

Resolved #이슈
See alos #이슈

---
TYPE = [ FE, BE, DB, DOCS, PKG, SETTING ... ]

작성 예시

[FE] 50자 또는 그 이하로 변경 사항을 요약

    - 필요하다면 더 자세한 설명을 서술한다. 맥락에 따라서 첫 행이 커밋의 제목처럼, 나머지 내용이 본문처럼 다뤄지는 경우도 있다.
    첫 행의 요약과 본문 사이에 빈 행을 넣는 것은 중요하다.
    이 규칙을 지키지 않은 경우에는 `log` 또는 `shortlog`, `rebase`와 같은 도구를 사용할 때 혼란스러울 수 있다.

    - 이 커밋이 해결한 문제에 관해 설명한다. 어떻게 문제를 해결했는지 설명하기 보다는 왜 이런 변화를 만들었는가에 집중한다. ("어떻게"는 코드가 설명한다.)
    이 변경으로 인해 나타나는 부작용이나 직관적이지 않은 결과가 나타나는가? 이 내용을 여기에서 설명한다.

    - 개조식 서술도 괜찮음

    - 블릿(bullet)으로 하이픈(-)이나 별표(*)를 사용하고, 한 칸의 공간을
    띄고 시작하며, 각 항목 사이 빈 행을 넣는 방식이 일반적이나 다양한
    관례가 있음

Resolves: #123
See also: #456, #789

참고문헌

Login authentication 방식

Login authentication을 Frontend와 Backend 중 어디서 처리해야 하는지에 관한 논의 필요

Frontend에서 로그인이 되지 않은 유저는 초기 페이지로 라우팅하므로 Backend에서 is_authenticated 을 통해 확인할 필요가 없을 것 같은데, 그럼에도 더블체크를 하는 것이 옳을지, 아니면 하지 않아도 될지에 대해 논의해야 할 것 같습니다.

Proposal

Team12 - Proposal

Service Name:

Smart Metting Note

Members:

Overall Description:

Smart Work Proceeding is a web service supporting organized documentation and maintenance of work proceedings.

Target Customer:

Every team that:

  • Holds meetings frequently.

  • Creating fabulous ideas.

  • Desires organized management on work proceedings conveniently.

ML Features**:**

Speech to Text

- Automatically create a text organized by speakers through recognizing speakers' voice.

- Select which part of text to include into the document or exclude from it sentence by sentence.

Essential Functions:

- Work proceedings managed by workspace unit

- Provide templates and customize easily

- Tag the speaker

- Upload and download reference files

- GOOOOOD User Experience

Description:

What is important for Projects? Idea? Business model? Yes, but without Management, nothing can be accomplished successfully. During the team meeting, all the members speak a lot and documenting all the ideas and issues is critical for a further progress. However, using 'Google Docs' as a documentation tool never can satisfy users.

'Google Docs' does not support file upload within the document and its workspace is complicated to manage. Our service SWP, however, solves these problems of inconvenience and helps writing and managing work proceedings in a more organized way by providing powerful functionalities.

SWP manages work proceedings with a workspace as a unit, and provides work proceeding templates. Users can customize these templates. SWP also provides a function that helps assign a user to each paragraph to specify the speaker of proposer, and a function that helps download or upload files within the meeting proceeding. A.I. voice recognition function is one of the essential function SWP provides; it transforms recognized voice into text thus allowing unconstrained communication between users. Users can use hash tags to search for specific topics.

Test & Demo:

Back-end will be stested with the Django test code, and front-end will be tested with React test library. Final demo will cover whole procedure of writing work proceeding from making workspace to write out meeting proceeding with voice recognition AI.

Reference Services:

  • Google Docs
  • Notion

[ML]ML Feature 개선안

현재는 회의 전체를 녹음해서 full-script 를 사후에 맥락 파악용으로만 제공하는 상황.

문제점

  1. Full script의 길이가 굉장히 길 것인데, 과연 유용하게 사용 가능할 것인가? 필요한 부분을
  2. 회의록 작성에 거의 도움이 되지 않는 feature이기 때문에 좋지 않은 피드백을 받았음

개선안

  1. TextBlock, 혹은 Agenda를 생성한 경우에만 녹음 활성화
  2. 녹음을 하면서 실시간으로 STT를 함
  3. Drag & Drop 가능한 말뭉치로 Text를 제공

TODO

  1. Google STT API 성능 체크
  • 얼마나 딜레이가 큰지
  • 얼마나 정확한지
  • 얼마가 드는지
  • 얼마나 긴 녹음까지 가능한지
  1. 말뭉치 단위에 대한 설정
  2. Drag&Drop 기능

[UI] Github Projects 연구

UI 부분에서 참고가 될 것 같으니 한 번 Github에서 제공하는 Projects 를 사용해보는 것도 좋을 것 같습니다.

[BE] API 수정해야 할 부분.

  1. UserSerializer에서 create는 그냥 objects.create()와 동일하여 user model에 대해선 password를 제대로 설정하지 못하는 부분.

  2. /api/signup/ POST에서 정상적으로 가입된 후에, response로 해당 user의 id를 반환해야하는데
    username과 password가 반환된다. (그리고 이거 password 같은 경우에는 해싱되서 나오는거라 뭐 잘은 모르겠지만, 안보여주는게 맞는 것 같음)

[GIT]브랜치 전략 변경

Git flow 활용

http://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html 참고

  • Develop 브랜치 대신 Demo 브랜치를 활용
  • 기존 feature에 대한 테스트코드는 직접 Demo 브랜치로 머지
  • 새로운 feature에 대한 테스트코드는 해당 feature 브랜치에서 함께 개발 후 PR
  • 만약 기존 feature에 대한 테스트코드 코드리뷰가 필요하다면 임시로 test/[해당 feature] 로 PR
  • 따로 release 브랜치는 사용하지 않음 (Demo 브랜치가 완성되었다면 팀원 합의 후 Master로 푸시)

Project Requirements and Specification

Project Requirements and Specification

Team 12

Services Name: Smart Meeting Note

Member

Version 1.0

Project Abstraction

During the team meeting, all the members speak a lot and documenting all the ideas and issues is critical for a further progress. However, some tools as a documentation tool never can satisfy users. So our service Smart Meeting Note, solves these problems of inconvenience and helps writing and managing meeting note in a more organized way by providing powerful functionalities.

Competitive Analysis

There are two competitors in documention tool service: 'Google Docs' and 'Notion'.

  • Google Docs

    • Pros: Participants of the meeting can easily share documents.

    • Cons: Managing documents by the unit of workspace is complicated, and users cannot upload files inside the document.

  • Notion

    • Pros: Users also can easily share documents, and users can easily manage documents by the unit of workspace.
    • Cons: But because notion is not specialized in meeting notes, users cannot check the flow or the progress of meetings easily.

Customer Needs

  • Having a meeting is inevitable for any group. (e.g. team project in school, many types of meetings in company, etc.)
  • Meeting participants would want to keep a record of their meeting and share it together simultaneously.
  • It will be more useful to keep track of continuous meetings about the same subject.
  • Meeting participants would not only want to get a gist of the overall meetings, but also want to see their assigned TODOs at a glance.

User Stories

Story#1: Create Meeting Note

Feature: Create a Meeting Note

Actors: Participants of any kinds of meeting.

Precondition: User needs to be logged in, and also be participated in a specific workspace.

Trigger: Click "Create Meeting Note" button.

Scenario:

  1. After logging in to a participating workspace, user can create a new meeting note.
  2. In creating a meeting note page, user can add or delete or modify the components of template(ex. agenda block/graph/calender/image) freely.
  3. User can create agenda blocks per each agenda, and inside the agenda block, user can write details of the meeting and Todos.
  4. User can assign workspace participants to each Todos.
  5. User can tag important keywords to each meeting and save the meeting note by clicking Completed button.

Exception:

  1. The meeting note must include at least one agenda block.
  2. If user puts no input to the meeting note, the save button should be deactivated.

Acceptance Test:

  1. When clicking 'create meeting note' button in the workspace, the screen displays selectable template options.
  2. User can select appropriate meeting note template and create new meeting note.
  3. When clicking the + button located at the right bottom side of creating new meeting note page, addable elements appears.
  4. User can change the position of the component by drag and drop.
  5. If the agenda block is focused, the block is expanded on the right panel.
  6. User can create new Todos by + button inside the agenda block.
  7. When creating new Todos, the screen displays the participants of the workspace who can be assigned.
  8. User can save the meeting note by clicking the complete button.

Story#2: Overview Previouse Meeting Note

Feature: Overview previous meeting notes.

Actors: Those who want to check their TODOs and previous meeting notes

Precondition: User has to be logged in, and previous meeting notes should exist.

Trigger: Enter the specific workspace

Scenario:

  1. Workspace home webpage displays the progress of agendas, Todos assigned to each user, and the flow of the previous meeting notes.
  2. If user want to see the detailed content, user can choose the meeting note of a specific date.
  3. When clicking Todo, user can see the meeting note containing corresponding Todo.
  4. After completing Todo, user clicks 'Done' button.

Acceptance Test:

  1. After logging in the main page of workspace renders the progress of agendas, Todos assigned to each user and the flow of the previous meeting notes.
  2. If there is completed Todo, user can click 'Done' checkbox. That Todo moves to the list of completed Todos.
  3. Clicking specific agenda leads to the meeting note of that agenda.
  4. Selecting specific date leads to the meeting note of that date.
  5. User can modify the meeting note by clicking the modifying button.

Story#3: Using Auto Typing

Feature: Providing STT(Speech to Text) Feature (ML)

Actors: Those who want to check context of the meeting afterwards

Precondition: User should be on the creating meeting note page. Users' voices should be registered in the ML and there is no identical voice.

Trigger: Click the 'Start STT' button.

**Exception:**Service should prevent a situation which users create several speedwritings by clicking 'Start STT' button and 'Stop' button repeatedly.

Scenario:

  1. Users keep participate in the meeting.
  2. User can terminate the recording by clicking Stop button or quitting writing the meeting note.
  3. The service automatically save the speedwriting of the meeting sorted by each participant's voice.
  4. User can check the speedwriting of the meeting by clicking 'voice recording' button.

Acceptance Test:

  1. User clicks 'STT' button inside the meeting note.
  2. Space which renders text pops up in the right side of the screen, and processed text is stacked in the space.
  3. STT를 사용한 회의록을 선택하면, 화면 우측에 녹음 기록 보기 버튼이 생긴다. Meeting note which had used the STT feature, the note displays 'Speedwriting' button on the right side of the screen.
  4. 버튼을 선택하면 저장된 텍스트가 나타난다. When clicking the 'Speedwriting' button, the voice record processed text is displayed.

User Interface Description

(The numbers in mockup is mapped to description numbers)

User_Interface

  1. If a user clicks New Meeting button, *'Template Select'*page pops up. In this page, the user can add or emit template blocks(components) by checkbox. At least one *'Agenda'block should be selected, or the 'Confirm'*button will be disabled.
  2. After clicking the confirm button in the Template Select pop-up page, the user will be redirected to a Meeting Note page. This page consists of several blocks selected in the previous stage. The user can fill in these blocks freely. Also, any block can be deleted by pressing *'Delete'*button.
  3. The user can add additional blocks by pressing *'Add Blocks'*button. A pop-up page similar with the *'Template Select'*page will appear. Blocks that cannot be added more will be disabled.
  4. The user will be redirected to the *'Meeting Note'*page after selecting the *'Confirm'*button in the *'Add blocks'*page.
  5. As the user click any block in the *'Meeting Note'*page, a detail about selected block appears in the right section of the browser. Here, the user can write down contents and add 'TODOs'. There are *'Assign to ...'*button in a *'TODO'*block, which shows every assignable participants' list when clicked. The user can choose multiple assignees. The block can be deleted by pressing *'Delete'*button.
  6. The user can finish creating or editing the meeting page by pressing *'Complete Meeting'*button, and will be redirected to the *'Dashboard'*page. Agendas and TODOs discussed in the meeting is going to be added automatically. Also, new 'Meeting Note' will be also added in the 'Meeting Note Overview' section.
  7. While creating a new 'Meeting Note', the user can press the 'Auto Typing' button and activate the 'Speech to Text' feature. Every speech of meeting participants' will be translated into text, tagged by the speakers line by line automatically through the AI. This text will be attached to the 'Meeting Note' so that the user can take a look at it afterward.
  8. Selecting one of the Meeting Notes or TODOs in the Dashboard, the user will be redirected to the specific 'Meeting Note' page and check the details.

[FE] Route와 history 관련

원래 코드에서는

<Route exact path="~">
     <SignUp>
</Route>

의 형태로 되어있었는데,

SignUp Component에서 this.props.history.push() 등의 메서드 호출할 때 오류가 발생해서, 찍어보니까 this.props에 history가 비어있는 형태로 오는 것 같습니다.

위의 코드를

<Route exact path="~" component={SignUp} />으로 바꿔도 될까요?

아니면 혹시 저렇게 해야하는 이유가 있는건가요~?

Model들에 대한 추가 고려사항

  1. Image 모델에서 이미지 설명을 위한 caption field를 추가하는 것이 어떨까요?

  2. File 모델의 경우 FileField를 사용해서 파일을 저장할 수 있습니다. 따로 url field를 만들기로 했었는데, 그냥 content field를 FileField로 저장하고 url field는 삭제하는 것이 어떤가요?

  3. Calendar, Table 모델의 content field를 어떻게 저장해야 하는지에 대해 논의할 필요가 있습니다.

[BE/API] User search / Workspace Search API 구현 필요

  1. 현재 workspace에서 새로운 member를 추가할 때
  2. 새로운 workspace 생성시 member를 추가할 때

두 경우에서 입력하는 email 에 따라 해당되는 유저를 찾아주는 filter 기능이 필요할 것 같습니다.
세부 스펙은 아래와 같으면 되지 않을까 싶습니다

  • API GET user/:email
  • Response
    • Req에서 보내는 email에 일치하는 부분이 있는 유저들
    • 예시

마찬가지로 workspace 모두를 가져오는 것도 필요할 것 같습니다

[FE]Note 내부 블락을 눌렀을 때 UI 개선안

기존

  1. Note Left의 블락을 누르면 Note Right에 Detail page가 뜨고 수정 가능
  2. 블락을 누르지 않는다면 Note Right Unfocused에서 다른 노트들의 정보 제공

개선안

  1. Note를 통합하고, 블락을 누르면 그 블락이 확대되고 곧바로 수정 가능
  2. 화면을 넓게 쓸 수 있으므로 왼편과 오른편에 추가적인 사이드바 구현
  • 우측: ML feature가 켜진 경우, Text script가 생성
  • 좌측: 블락 생성하는 창

TODO

SASS / SCSS

SASS / SCSS

SASS / SCSS 는 CSS 전처리기(preprocessor).
CSS와 기본적인 문법은 동일하나 변수 설정, 함수, mixin 등 여러 추가적인 기능을 제공해준다.

가장 강력한 기능은 다음과 같다!

위 세 기능만 가지고도 충분히 좋다고 느낄거 같은데 적용해보는거 어떤가요?
(사실 이미 적용하고있습니다..)


Reference

SCSS Official
SCSS Docs

[FE/BE]Labeling 기능 추가

TODO

기존 계획

  • 해쉬 태그 설정

해쉬태그의 실용성에 대한 의문

개선안

  • 라벨링으로 변경 (깃헙 이슈처럼)
  • 어젠다 제목을 대체하자는 의견

각 유저의 모든 Todo 를 호출하는 API

현재 각 유저의 모든 Todo list를 호출하는 API url이 다음과 같이 작성되어있습니다.
workspace/w_id/user/u_id/todos
여기서 유저의 id의 경우 request.user.id로 가져올 수 있기 때문에 굳이 /user/u_id/ 부분이 필요 없어보입니다.
단순하게 workspace/:id/todos 로 가져와도 될 것으로 보이는데, 의견 부탁드립니다.

API 수정사항

1. /profile/:id/ 추가

  • GET: 특정 프로필 반환
  • PATCH: 특정 프로필 정보 수정

2. /user/:id/ 삭제

  • /profile/:id/ 로 통합

3. 모든 블록 수정사항

  1. 각 블록별로 /workspace/:w_id/notes/n_id/[block]/로 접근해서 해당 workspace와 note에 속하는 모든 블록을 불러오도록 url이 짜여져 있습니다. 하지만 다음과 같은 문제점이 있습니다.
    (1) workspace와 상관없이 notes들은 고유 id가 있기 때문에 workspace의 id가 필요하지 않음
    (2) 현재 이 api를 호출하는 component가 note인지 agenda인지에 대한 정보가 없음 (is_parent_note를 특정할 수 없음)

    그러므로 /parent/p_id/[block]/is_parent_note/ 로 api url을 변경하는 것을 건의합니다. 여기에서 is_parent_note는 String으로 True/False를 넣으면 될 것 같습니다.
  • 예를 들어 Frontend에서 id=2인 Note Container에 속한 id=3인 Agenda Container에서 Calendar Component를 가져와야한다면, /parent/3/calendar/False/ 로 호출하고, 다른 예시로 id=1인 Note Container에서 직접 Todo Component를 가져와야한다면, /parent/1/todo/True/ 로 호출하면 됩니다.

  • 다른 대안으로, 위의 예시를 각각 /agenda/3/calendar//note/1/todo/ 로 나누어 호출하는 것도 생각해볼 수 있습니다. 즉, /agenda/:id/[block]//note/:id/[block] 의 두 API로 나누어 구현하는 것입니다. 이 경우 자동적으로 agenda가 url의 시작이라면 is_parent_note = False로 필터링할 수 있고, 반대도 가능합니다.

  1. 역시 각 블록별로 /workspace/:w_id/notes/:n_id/[block]/:id/로 접근해서 해당 workspace와 note에 속하는 특정 블록을 찾아올 수 있도록 url이 짜여있습니다. 역시 다음과 같은 문제점이 있습니다.
    (1) workspace와 상관없이 notes들은 고유 id가 있기 때문에 workspace의 id가 필요하지 않음
    (2) 나아가 각 블록별 id 역시 고유하므로 note의 id가 필요하지 않음

    그러므로 /[block]/:id/로 api url을 변경하는 것을 건의합니다.

의견 부탁드려요!

[FE/BE]User Auth 개선

문제점

  1. 로그인 실패시 로그인 실패와 관련된 alert가 없음 (FE)
  2. 로그인 성공 후, 현재 로그인 된 user 에 대해 알 수 없음 (상태바 추가할 필요성) (FE)
  3. 로그아웃 구현이 안되어있음 (FE)
  4. 로그인하지 않은 상태에서도 url로 모든 리소스에 접근 가능함 (FE/BE)
  5. 가입시 비밀번호 공개 기능 없음 (optional)
  6. 닉네임 수정기능 없음 (optional)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.