Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions NFT_Generator/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions NFT_Generator/.idea/NFT_Generator.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions NFT_Generator/.idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions NFT_Generator/.idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions NFT_Generator/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions NFT_Generator/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions NFT_Generator/AbstractClasses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from abc import *


# 추상 클래스
class Publisher(metaclass=ABCMeta):
@abstractmethod
def subscribe(self):
pass

@abstractmethod
def unsubscribe(self):
pass


# 추상 클래스
class Subscriber(metaclass=ABCMeta):
@abstractmethod
def receive(self):
pass


# 추상 클래스
class Decorator(metaclass=ABCMeta):
@abstractmethod
def activate(self):
pass
57 changes: 57 additions & 0 deletions NFT_Generator/ClassDef.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from TypeDef import *


class UserInfo:
def __init__(self, userName: str, userEmail: str, isValidUser: bool):
self._userName = userName
self._userEmail = userEmail
self._isValidUser = isValidUser

@property
def userName(self):
return self._userName

@property
def userEmail(self):
return self._userEmail

@property
def isValidUser(self):
return self._isValidUser


class Combined:
def __init__(self, userInfo: UserInfo, rawMusic: Audio, musicAddress: str):
self._userInfo = userInfo
self._rawMusic = rawMusic
self._musicAddress = musicAddress

def isSafe(self):
# userInfo 확인하기
if not self._userInfo.userName.isascii():
raise Exception("유저 이름이 유효하지 않습니다.")

if not self._userInfo.userEmail.isValidEmail():
raise Exception("이메일이 유효하지 않습니다.")

if not self._userInfo.isValidUser:
raise Exception("유저 정보가 유효하지 않습니다.")

# rawMusic 확인하기
if not self._rawMusic.file.count() > 0:
raise Exception("rawMusic이 유효하지 않습니다.")

# musicAddress 확인하기


class Analyzed:
def __init__(self, result: [str]):
self._result = result


class Packet:
def __init__(self, information: Combined, analyedResult: Analyzed, approvedDegree: int, isApproved: bool):
self._information = information
self._analyzedResult = analyedResult
self._approvedDegree = approvedDegree
self._isApproved = isApproved
82 changes: 82 additions & 0 deletions NFT_Generator/ExtendedClasses.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
from AbstractClasses import *
from ClassDef import *
from TypeDef import *


# 자식 클래스
class Controller(Publisher):
token = None
packet = None

def subscribe(self):
pass

def unsubscribe(self):
pass

def didSubmit(self):
pass

def destroyUInfo(self):
pass

def destroyM(self):
pass

def destroyU(self):
pass

def doRegister(self, p: Packet):

pass

def prompt(self):
pass

# 토큰 설정하기
def set_token(self, t: Token):
self.token = t


# 자식 클래스
class UserControl(Subscriber):
def receive(self):
pass

def enterUserInfo(self, u: UserInfo):
pass


# 자식 클래스
class Combiner(Decorator):
def activate(self):
pass

def combine(self, u: Combined):
pass


class Analyzer(Decorator):
def activate(self):
pass

def analyze(self, an: Analyzed):
pass


class ERC721Standard(Decorator):
def activate(self):
pass

def buildPacket(self, p: Packet):
# p에 있는 정보들이 유효한지 검사한다.
if p._information.isSafe() and p._analyzedResult.isSafe() and p._approvedDegree.isSafe() and p._isApproved:
return p
else:
return None

def approveForAll(self, controller: Controller):
pass

def register(self):
pass
17 changes: 17 additions & 0 deletions NFT_Generator/TypeDef.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class Audio:
def __init__(self, file: str):
self._file = file

@property
def file(self):
return self._file


class Music:
def __init__(self, rawMusic: Audio):
self._rawMusic = rawMusic


class Token:
def __init__(self, t: str):
self._token = t
24 changes: 24 additions & 0 deletions NFT_Generator/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from ExtendedClasses import *

# controller instance 생성
myController = Controller()

# 사용자가 Community 모델의 코드를 통해 register 이전의 과정 마쳤다고 가정
# 사용자 정보 가정하기
userInfo = UserInfo(userName="Yejin", userEmail="oipivigui@cau.ac.kr.", isValidUser=True)
audio = Audio(file="https://www.youtube.com/watch?v=c7ZxSTxfScA")
combined = Combined(userInfo=userInfo, rawMusic=audio, musicAddress="https://www.youtube.com/watch?v=c7ZxSTxfScA")

# 사용자가 Analyzer 모델의 코드를 통해 analyze 마쳤다고 가정
analyzedResult = Analyzed(["유사도 0%", "유사도 3%", "유사도 2%"])

# 패킷 생성 됨
p = Packet(information=combined, analyedResult=analyzedResult, approvedDegree=100, isApproved=True)

# 패킷 등록하기
myController.doRegister(p)

# 블록체인에서 승인결과 받아서 controller에 등록하기
standard = ERC721Standard()
standard.approveForAll(controller=myController)

Loading