Git Product home page Git Product logo

studi's People

Contributors

hagyutae avatar histuckyi avatar takdaim avatar

Watchers

 avatar

studi's Issues

Configuration에 대한 명세 (YAML 형식)

각종 구성(Configuration)에 대한 명확한 가이드라인을 정해야 함
YAML 형식의 config 파일 생성 및 config 관리 모듈 작성

  • 몇번 포트로 띄울 것인지

  • 로깅을 어느 수준까지 남길지

  • DB 파일의 위치

Studi 2.0 renewal goal

  • 패키지 구조 개선
    • flask, python의 일반적인 패키지 구조에 맞게 개선
  • XML 형식의 노트 작성 방식 폐기, CSV 형식의 노트 작성 방식 구현
    • 현재의 노트 작성 방식
      <note name="노트 제목"><item title="항목 이름">항목 내용</item><item title="항목 이름">항목 내용</item></note>
  • SQLite-Studi 인터페이스에 raw SQL query statement 사용 폐기, ORM 적용
    • SQLAlchemy 사용 예정
  • YAML 형식의 config 파일 생성 및 config 관리 모듈 작성
  • 테스트 코드 개선, 단위 테스트 보충
  • 문서화
    • 코드 문서화 -> Sphinx 사용
    • Readme 파일에 How to install & use Studi 가이드 내용 포함
  • 배포 자동화 적용
    • Travis, Docker(Docker hub) 사용한 배포 자동화

SQLite에 대한 ORM 적용

  • 이 이슈는 csv_quiz_uploader(#45) branch로부터 파생한 apply_orm에서 구현되고 있음
  • SQLite-Studi 인터페이스에 raw SQL query statement 사용 폐기, ORM 적용

  • ORM으로는 Flask-SQLAlchemy으로 적용할 예정임
    Flask-SQLALchemy Document (http://flask-sqlalchemy.pocoo.org/2.3/)

  • SQLite 테이블 확인을 위해 DB Browser for SQLite 설치 후 사용(https://sqlitebrowser.org/dl/)

  • DB 생성하기 구현

  • 기본적인 데이터 삽입, 데이터 삭제, 데이터 추가 함수 구현

  • 퀴즈 풀때 imp, und 업데이트 하는 부분도 수정하여 구현

  • 테스트 코드 구현 (insert, select, delete, update)

  • 노트를 삭제할 때 note_id를 외래키로 참조하고 있는 clauses와 clausePoints의 데이터도 같이 삭제하는 함수 별도 구현

  • Flask_SQLAchemy 패키지(version=2.3.2)를 적용하여 upload.py의 save_csv_contents_to_db 함수 구현
    pip3 install flask_sqlalchemy

  • DB 없을 시에 생성하고 있으면 유효한 DB 인지 검증(?)

  • intf_db.py 파일을 필요 없으면 정리할 것

  • 테스트 html에 코드에 적용

collapse 형태로 퀴즈 부분 수정

퀴즈의 title과 content를 bootstrap의 collapse 형태로 펼치고 보일 수 있도록 수정
따라서 버튼은 아래에 fixed 될 수 있도록 수정해야 함
나머지 부분은 content의 내용에 따라 스크롤 될 수 있도록 해야함

노트를 csv 파일로 업로드하는 방식으로 개선

노트를 등록하는 방식을 CSV 파일 형태로 업로드하는 방식으로 개선한다.
csv 파일 하나는 노트의 단위이다.(파일명이 노트의 이름이다)
title/content는 맨 위 상단에 title, content로 구분이 되어 있어야 한다.

  • csv 파일을 읽어들이는 함수(UploadCSVMaterial) 구현
    (Flask_RESTful에서 사용하는 모든 request parser(reqparse 포함)는 제거될 예정이므로, marshmallow로 적용할지 추후 고려해 볼것)
    (참고 링크 : https://flask-restful.readthedocs.io/en/0.3.5/reqparse.html)

  • 업로드된 파일에 대한 예외처리가 필요함

    • 형식에 맞지 않은 문서 (csv 파일이 아닌 경우)
  • Notes의 post 부분에 포함 시키도록 변경

추후 이슈 추가해서 처리

  • title이나 contents에 대한 명시가 없는 경우 (column이 2개면 허용 or 명시하지 않으면 예외처리?)

decorator를 사용한 logging 방식으로 변경

모듈별로 발생할 수도 있는 exception을 고려하여 decorator를 사용한 logging 방식으로 변경

  • 목적별 로깅을 고려할 것 (디버깅용 로깅, 데이터 분석 등등)
  • 기존 로깅 방식을 decorator 형식으로 변경 할 것
  • 파일을 구조화 할 것 (모듈별 로깅 function을 한 파일로 모을지 말지 여부)

기존 노트에 대한 수정/추가/삭제 기능 구현

새로운 방식에서는 기존 노트에 대한 수정/추가/삭제, point에 대한 일괄 변경이 가능하도록 기능을 추가

이유 :
기존 방식은 한번 업로드 하면 오타가 있어도 수정이 불가능하고 노트를 삭제한 후 재 업로드 해야 함
그렇게 되면, 기존에 point에 대한 정보가 초기화됨

고려할 사항:

  • ui 화면을 어떻게 구성할 것인가
  • pc 버전을 이제 지원하는가 (기존은 모바일 타겟이었음)

테스트 코드 개선, 단위 테스트 보충

새로 추가되는 기능 및 그 외에도 더 추가해야 하는 테스트 코드 추가, 개선

  • DB 생성
  • table에서 데이터 삭제 / 로그
  • table에 데이터 추가 / 로그
  • table에서 데이터 조회 / 로그
  • table에 데이터 업데이트 / 로그
  • rest api에 대한 요청후 응답 테스트 / 로그

pointlist 업데이트 기능

origin 값을 가지고 있고 다음 퀴즈로 넘어갈 때
기존에 저장한 데이터와 현재의 point 데이터가 다를 경우에만 업데이트 되도록
변경 사항이 있는지에 대한 isChanged 플래그 사용하여 업데이트 되도록 수정

REST API 구조로 변경하기

<기존 방식>
view.py에서 @app.route('/note/int:note_id')로 html을 반환받거나
upload.py 에서 UploadMaterial에서 파일을 업로드하거나
rest_api.py에서 리소스에 대한 데이터를 처리하는 등 이곳저곳에서
요청을 처리하여 반환하였음

<변경 방식>
모든 리소스에 대한 처리를 rest_api.py 에서 REST의 원칙에 따라서
리소스의 GET, POST, DELETE, PUT에 대한 요청을 처리하고 데이터를 반환하는 것으로 변경한다.

  • 각 리소스(Notes, Clauses, Clause_points)마다 사용할 HTTP Method를 정의한다

  • 각 리소스를 Method 별로 테스트 코드를 작성한다

<관련 issue>
#49 #45

<남겨진 과제>
서버에서 렌더링하여 html을 반환하지 않고 서버와 클라이언트를 분리하는 작업을 추후 진행

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.